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

本文关键字:问题 密钥 加密 AES 256位 | 更新日期: 2023-09-27 18:26:35

我正在尝试在C#中执行AES 256位CBC加密。我正在使用此页面中的示例密钥/iv字符串:http://pic.dhe.ibm.com/infocenter/initiate/v9r5/topic/com.ibm.einstall.doc/topics/t_einstall_GenerateAESkey.html

然而,当我运行下面的函数时,当我试图设置密码时,我收到一个错误,说"指定的密钥不是该算法的有效大小"。钥匙我可以在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();
    }

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

该键字符串长64个字符,即512位,而不是256位。看起来字符串包含32个十六进制值,但您需要这样做:

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

AES根据密钥大小提供以下位。

16长度的密钥大小,则AES-128比特将适用。24长度的密钥大小,则AES-192比特将适用。32长度的密钥大小,则AES-256将适用。

密钥大小:128、192或256位圆形:10、12或14(取决于密钥大小)