AES c#编码。无法获得有效的结果

时间:2011-10-13 17:33:33

标签: c# aes

我有测试输入字符串(key = value& key = value ...)和键(如此D2335A9CA4924D9F914D2B47B450D436) 我需要使用AES加密来加密我的字符串,但我的结果不等于提供者的结果。结果示例: AD0C66FB3C1204A8B0AC68AA9B9E3029C86DFF5872753F2F8D7B68EA667D8616215C20F831ABD5A4D56F286E471651AE5C15BCEB2F368200B4D9F3F6D2F0791E8F45D45FD .................... 我做错了什么? (googlized代码)

public static string Encrypt(string toEncrypt)
        {
            byte[] keyArray = ASCIIEncoding.ASCII.GetBytes("D2335A9CA4924D9F914D2B47B450D436");
            byte[] toEncryptArray = ASCIIEncoding.ASCII.GetBytes(toEncrypt);
            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            rDel.KeySize = 128;
            rDel.BlockSize = 256;
            rDel.IV = keyArray;
            rDel.Mode = CipherMode.CFB; 
            rDel.Padding = PaddingMode.PKCS7; 
            ICryptoTransform cTransform = rDel.CreateEncryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return FormatByteArray(resultArray);
        }

        internal static string FormatByteArray(byte[] b)
        {
            System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
            int i = 0;
            for (i = 0; i < b.Length; i++)
            {
                if (i != 0 && i % 16 == 0)
                    sb1.Append("\n");
                sb1.Append(System.String.Format("{0:X2} ", b[i]));
            }
            return sb1.ToString();
        }

1 个答案:

答案 0 :(得分:3)

  

我做错了什么?

byte[] keyArray = ASCIIEncoding.ASCII.GetBytes("D2335A9CA4924D9F914D2B47B450D436");

这不可能是正确的。它会给你64个字节,其中一半是0x00。

看起来它是十六进制编码的,我想你需要一个小循环来解码它 这将给你16个字节(128位)。


旧答案:

<击> 您需要解码此字符串,它可能是Base64编码。尝试:

<击>
byte[] keyArray = System.Convert.FromBase64String("D2335A9CA4924D9F914D2B47B450D436")

并检查您是否拥有有效(长度)密钥。