C# 中 RijndaelManaged 的 IV 块大小问题
IV Block Size Issue with RijndaelManaged in C#
我在使用此代码使用 RinjndaelManaged 加密字符串时遇到问题。我一直收到错误消息“指定的初始化向量 (IV) 与该算法的块大小不匹配”并且匹配了密钥和 IV 长度并尝试了 32 个字符长度的密钥和从 4 到 32 每 4 个字节。代码错误开头的行:
aes.IV = Convert.FromBase64String(myString);
代码块如下:
private String AES_encrypt(String Input)
{
var aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 256;
aes.Padding = PaddingMode.PKCS7;
String myString = new string('J', 32);
aes.Key = Convert.FromBase64String(myString);
aes.IV = Convert.FromBase64String(myString);
var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
byte[] xXml = Encoding.UTF8.GetBytes(Input);
cs.Write(xXml, 0, xXml.Length);
}
xBuff = ms.ToArray();
}
String Output = Convert.ToBase64String(xBuff);
return Output;
}
}
我只使用 myString 长度来快速遍历一堆选项。我正在使用这个特定的 Keysize/Block/Padding 和加密方案来使用 PHP 代码来解密这些数据。
您要设置为 IV 的 Base64 字符串长度为 16 字节(128 位),而您的加密算法需要 256 位 IV。
将您的 IV 更改为 32 字节长的字节数组。
Base64: 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ'
Decoded: '$I$I$I$I$I$I$I$I' (16 bytes = 128 bits long)
一个包含 32 个 'J' 的字符串将产生 24 个字节,而不是 16 个或 32 个字节。不要尝试对其进行 Base64 解码。最好阅读 Base64。
密钥和 IV 使用相同的值是不安全的。
我在使用此代码使用 RinjndaelManaged 加密字符串时遇到问题。我一直收到错误消息“指定的初始化向量 (IV) 与该算法的块大小不匹配”并且匹配了密钥和 IV 长度并尝试了 32 个字符长度的密钥和从 4 到 32 每 4 个字节。代码错误开头的行:
aes.IV = Convert.FromBase64String(myString);
代码块如下:
private String AES_encrypt(String Input)
{
var aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 256;
aes.Padding = PaddingMode.PKCS7;
String myString = new string('J', 32);
aes.Key = Convert.FromBase64String(myString);
aes.IV = Convert.FromBase64String(myString);
var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
byte[] xXml = Encoding.UTF8.GetBytes(Input);
cs.Write(xXml, 0, xXml.Length);
}
xBuff = ms.ToArray();
}
String Output = Convert.ToBase64String(xBuff);
return Output;
}
}
我只使用 myString 长度来快速遍历一堆选项。我正在使用这个特定的 Keysize/Block/Padding 和加密方案来使用 PHP 代码来解密这些数据。
您要设置为 IV 的 Base64 字符串长度为 16 字节(128 位),而您的加密算法需要 256 位 IV。
将您的 IV 更改为 32 字节长的字节数组。
Base64: 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ'
Decoded: '$I$I$I$I$I$I$I$I' (16 bytes = 128 bits long)
一个包含 32 个 'J' 的字符串将产生 24 个字节,而不是 16 个或 32 个字节。不要尝试对其进行 Base64 解码。最好阅读 Base64。
密钥和 IV 使用相同的值是不安全的。