日期:2014-05-17  浏览次数:20662 次

指定键的大小对于此算法无效。
关于DES解密,先贴出代码:

        ///?<summary>????
        ///?解密数据????
        ///?</summary>??
        ///?<param?name="Text"></param>????
        ///?<param?name="sKey"></param>????
        ///?<returns></returns>??
        public string DecryptString(string Text, string sKey,string sIV)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
            des.Mode = System.Security.Cryptography.CipherMode.CBC;
            des.Padding = PaddingMode.Zeros;
            int len;

            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len]; 
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16); 
                inputByteArray[x] = (byte)i;
            }
            byte[] kkey = ASCIIEncoding.UTF8.GetBytes(sKey);
            byte[] iiv = ASCIIEncoding.UTF8.GetBytes(sIV;
            des.Key = kkey;//+++这里报错 指定键的大小对于此算法无效。+++
            des.IV = iiv;
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); 
            cs.Write(inputByteArray, 0, inputByteArray.Length); 
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }

网上google了一下,说是传的key的位数不正确,所以按着这个思路调试发现当前这个加密方式要求的key位数为8位,但是我传的key位数为16位,所以报错了。
但是这个key是合作方给我的,他们用此key进行加密,然后传给我,我肯定是要按照他给的key再进行解密,所以小弟不明白这里我改怎么去转换key呢?