C#中AES 256位加密密钥大小的问题

7
我正在尝试使用C#进行AES 256位CBC加密。我正在使用此页面上的示例密钥/iv字符串:http://pic.dhe.ibm.com/infocenter/initiate/v9r5/topic/com.ibm.einstall.doc/topics/t_einstall_GenerateAESkey.html。但是当我运行下面的函数时,尝试设置cipher.Key时会收到错误消息“指定的密钥不是此算法的有效大小。” 我能够在node.js项目中使用此密钥/iv组合,但我尝试将其移植到C#时无功而返。我在下面做错了什么?
    static void Main(string[] args)
    {
        string keyString = "B374A26A71490437AA024E4FADD5B497FDFF1A8EA6FF12F6FB65AF2720B59CCF";
        string ivString = "7E892875A52C59A3B588306B13C31FBD";

        byte[] key = Encoding.UTF8.GetBytes(keyString);
        byte[] iv = Encoding.UTF8.GetBytes(ivString);

        Console.WriteLine("Key is " + key.Length + " bytes.");

        using (RijndaelManaged cipher = new RijndaelManaged())
        {
            cipher.Mode = CipherMode.CBC;
            cipher.KeySize = 256;
            cipher.BlockSize = 128;
            cipher.Key = key;
            cipher.IV = iv;

            // Create a decrytor to perform the stream transform.
            ICryptoTransform encryptor = cipher.CreateEncryptor(cipher.Key, cipher.IV);
        }

        Console.WriteLine("Success!");
        Console.ReadKey();
    }
2个回答

10

那个关键字符串有64个字符,相当于512位,而不是256位。看起来该字符串包含32个十六进制值,但你需要执行以下操作:

byte[] key = new byte[] { 0xB3, 0x74, 0xA2, 0x6A, 0x71, 0x49, 0x04 etc. };

非常感谢!它确实包含32个十六进制值,所以我只需要将字符串转换为十六进制(使用此解决方案https://dev59.com/FXRC5IYBdhLWcg3wXPwC),然后检索字节。 - jkriddle

2

AES根据密钥长度提供以下位数。

如果密钥长度为16,则适用AES-128位。 如果密钥长度为24,则适用AES-192位。 如果密钥长度为32,则适用AES-256位。

密钥长度:128、192或256位 轮数:10、12或14(取决于密钥长度)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接