//=================================================================================== 
   public static string Decrypt(string pToDecrypt, string sKey)
    {
        DESCryptoServiceProvider provider1 = new DESCryptoServiceProvider();        byte[] buffer1 = new byte[pToDecrypt.Length / 2];        for (int num1 = 0; num1 < (pToDecrypt.Length / 2); num1++)
        {
            int num2 = Convert.ToInt32(pToDecrypt.Substring(num1 * 2, 2), 0x10);
            buffer1[num1] = (byte)num2;
        }
        provider1.Key = Encoding.ASCII.GetBytes(sKey);
        provider1.IV = Encoding.ASCII.GetBytes(sKey);
        MemoryStream stream1 = new MemoryStream();
        CryptoStream stream2 = new CryptoStream(stream1, provider1.CreateDecryptor(), CryptoStreamMode.Write);
        stream2.Write(buffer1, 0, buffer1.Length);
        stream2.FlushFinalBlock();
        StringBuilder builder1 = new StringBuilder();
        return Encoding.Default.GetString(stream1.ToArray());
    }
//=================================================================================如题请求写一个逆向对称解密函数,谢谢!

解决方案 »

  1.   

    应该不难写,帮帮忙,偶刚学ASP.Net 有些不懂呀!
      

  2.   

    你是用Encoding.ASCII.GetBytes作密匙得,非常麻烦。好像是要16位
    我用System.Text.Encoding.Unicode.GetBytespublic static string Decrypt(string datastr, string keystr) 
    {
     
    System.Security.Cryptography.DESCryptoServiceProvider desc = new System.Security.Cryptography.DESCryptoServiceProvider();
    byte[] key = System.Text.Encoding.Unicode.GetBytes(keystr);
    byte[] data = Convert.FromBase64String(datastr);
    System.IO.MemoryStream ms = new System.IO.MemoryStream();//存储解密后的数据
    CryptoStream cs = new CryptoStream(ms, desc.CreateDecryptor(key, key), CryptoStreamMode.Write);
    cs.Write(data, 0, data.Length);//解密数据
    cs.FlushFinalBlock();
    return System.Text.Encoding.Unicode.GetString(ms.ToArray());
     
    }
      

  3.   

    这个函数得配套加密函数,你根据差别是可以修改出合适自己得。
    public static  string Encrypt(string datastr, string keystr) 
    {
     
    DESCryptoServiceProvider desc = new DESCryptoServiceProvider();//des进行加密
    byte[] key = System.Text.Encoding.Unicode.GetBytes(keystr);
    byte[] data = System.Text.Encoding.Unicode.GetBytes(datastr);
    MemoryStream ms = new MemoryStream();//存储加密后的数据
    CryptoStream cs = new CryptoStream(ms, desc.CreateEncryptor(key, key), CryptoStreamMode.Write);
    cs.Write(data, 0, data.Length);//进行加密
    cs.FlushFinalBlock();
    return Convert.ToBase64String(ms.ToArray());//取加密后的数据
     
    }
      

  4.   

    我写过如下的.确不行.加密后要是16进制的字符串.因为一些原因,我不能用你的例子那样的准标过程.麻烦大哥再帮我看下吧.//==============================================================
     
    public static string Encrypt(string pToEncrypt, string sKey)
        {
            DESCryptoServiceProvider provider2 = new DESCryptoServiceProvider();        byte[] buffer3 = new byte[pToEncrypt.Length];        provider2.Key = Encoding.ASCII.GetBytes(sKey);
            provider2.IV = Encoding.ASCII.GetBytes(sKey);
            MemoryStream stream5 = new MemoryStream();
            CryptoStream stream6 = new CryptoStream(stream5, provider2.CreateEncryptor(), CryptoStreamMode.Write);
            stream6.Write(buffer3, 0, buffer3.Length);
            stream6.FlushFinalBlock();
           // StringBuilder builder1 = new StringBuilder();
            //return Encoding.Default.GetString(stream1.ToArray());
           byte[] buffer4 = new byte[stream5.ToArray().Length];
           buffer4 = stream5.ToArray();
           string text1= "";
           for (int num1 = 0; num1 < buffer4.Length;num1++)
           {
               int num2 = (Int32)buffer4[num1];
               text1 = text1 + Convert.ToString(num2, 0x10);
               //text1 = text1 + buffer2[num1].ToString() + " " ;
           }
           return text1.ToUpper();
        }
      

  5.   

    public static string Encrypt(string pToEncrypt, string sKey)
        {
            DESCryptoServiceProvider provider2 = new DESCryptoServiceProvider();        byte[] buffer3 = new byte[pToEncrypt.Length];        provider2.Key = Encoding.ASCII.GetBytes(sKey);
            provider2.IV = Encoding.ASCII.GetBytes(sKey);
            MemoryStream stream5 = new MemoryStream();
            CryptoStream stream6 = new CryptoStream(stream5, provider2.CreateEncryptor(), CryptoStreamMode.Write);
            stream6.Write(buffer3, 0, buffer3.Length);
            stream6.FlushFinalBlock();
           // StringBuilder builder1 = new StringBuilder();
            //return Encoding.Default.GetString(stream1.ToArray());
           byte[] buffer4 = new byte[stream5.ToArray().Length];
           buffer4 = stream5.ToArray();
           string text1= "";
           
           for (int num1 = 0; num1 < buffer4.Length;num1++)
           {
                text1= text1+ buffer4[i].ToString("X").PadLeft(2,'0');
            }
           return text1;
      

  6.   

    text1= text1+ buffer4[num1].ToString("X").PadLeft(2,'0');