【发布时间】:2016-05-05 05:38:38
【问题描述】:
我无法使用此代码使用 RinjndaelManaged 加密字符串。我不断收到错误“指定的初始化向量 (IV) 与此算法的块大小不匹配”,并且匹配了密钥和 IV 长度,并尝试了 32 字符长度的密钥和每 4 个字节从 4 到 32。以:
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 代码。
【问题讨论】:
-
想知道为什么要使用块大小为 256 位的 Rijndael,因为 AES 是块大小为 128 位的 Rijndael。通常,使用 AES 块大小对互操作性更好。此外,人们担心较大的块大小可能不那么安全,对较大块大小的研究要少得多。
-
我会看看这个块大小。我认为它曾经与接收此代码输出的 PHP 函数兼容。
标签: c# encryption rijndaelmanaged