在 Rijndael class 中设置值时程序崩溃
Program crashes when setting values in Rijndael class
我目前有以下代码。
我正在从硬编码随机数 string
中生成 byte array
。
现在我注意到在设置 Rijndael
class 时应用程序会在设置键值时崩溃。关于设置键值时崩溃的原因的任何建议。
int olength = 18;
string HKey = "ABCDEFGHIJKL111100002222"; //Some random string
byte[] key = Convert.FromBase64String(HardcodedKey); //key.length = 18
byte[] iv = Encryption.GenerateRandomBytes(olength);
CryptoStream cs = Encryption.AES128Stream(key, iv, Context.Response.Body);
现在调用上面的方法如下
public static CryptoStream AES128Stream(byte[] key, byte[] iv, Stream stream)
{
try
{
Rijndael rijndael = Rijndael.Create();
rijndael.Mode = CipherMode.CBC;
rijndael.Padding = PaddingMode.PKCS7;
rijndael.KeySize = 128;
rijndael.BlockSize = 128;
rijndael.Key = key; ///---->CRASHES HERE
rijndael.IV = iv;
ICryptoTransform rijndaelEncryptor = rijndael.CreateEncryptor();
return new CryptoStream(stream, rijndaelEncryptor, CryptoStreamMode.Write);
}
catch (Exception e)
{
throw e;
}
}
在附加信息中指出
Additional information: Specified key is not a valid size for this
algorithm.
在这种情况下,我可以使用什么字符串?为什么这个字符串不起作用?
由于您将 Rjindael 定义为具有 128 位的密钥大小,因此您必须恰好为 class 提供 16 个字节才能工作。您的密钥似乎太长(或太短)。
另外,由于我不知道你的真实密钥,我不知道你的Convert.FromBase64String()
是否正确使用。但是,我建议你可以直接使用 byte[]
来避免这个问题:
//put 16 to be really sure.
byte[] key = new byte[16] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
我目前有以下代码。
我正在从硬编码随机数 string
中生成 byte array
。
现在我注意到在设置 Rijndael
class 时应用程序会在设置键值时崩溃。关于设置键值时崩溃的原因的任何建议。
int olength = 18;
string HKey = "ABCDEFGHIJKL111100002222"; //Some random string
byte[] key = Convert.FromBase64String(HardcodedKey); //key.length = 18
byte[] iv = Encryption.GenerateRandomBytes(olength);
CryptoStream cs = Encryption.AES128Stream(key, iv, Context.Response.Body);
现在调用上面的方法如下
public static CryptoStream AES128Stream(byte[] key, byte[] iv, Stream stream)
{
try
{
Rijndael rijndael = Rijndael.Create();
rijndael.Mode = CipherMode.CBC;
rijndael.Padding = PaddingMode.PKCS7;
rijndael.KeySize = 128;
rijndael.BlockSize = 128;
rijndael.Key = key; ///---->CRASHES HERE
rijndael.IV = iv;
ICryptoTransform rijndaelEncryptor = rijndael.CreateEncryptor();
return new CryptoStream(stream, rijndaelEncryptor, CryptoStreamMode.Write);
}
catch (Exception e)
{
throw e;
}
}
在附加信息中指出
Additional information: Specified key is not a valid size for this algorithm.
在这种情况下,我可以使用什么字符串?为什么这个字符串不起作用?
由于您将 Rjindael 定义为具有 128 位的密钥大小,因此您必须恰好为 class 提供 16 个字节才能工作。您的密钥似乎太长(或太短)。
另外,由于我不知道你的真实密钥,我不知道你的Convert.FromBase64String()
是否正确使用。但是,我建议你可以直接使用 byte[]
来避免这个问题:
//put 16 to be really sure.
byte[] key = new byte[16] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };