假设我将KeySize设置为192个,当我通过以下操作加密某些数据时:
static void Main()
{
var querystrings = "dataToEncrypt";
byte[] keyvalue = new byte[] { 241, 205, 121, 123, 109, 246, 247, 103, 31, 225, 167, 220, 247, 119, 247, 119, 78, 125, 127, 167, 156, 213, 230, 250, };
byte[] ivvalue = new byte[] { 194, 177, 79, 213, 87, 46, 213, 189, 243, 169, 32, 13, 217, 62, 34, 170, };
byte[] querystringBytes = Encoding.UTF8.GetBytes(querystrings);
using (RijndaelManaged rijndaelManaged = new RijndaelManaged())
{
rijndaelManaged.BlockSize = 128;
rijndaelManaged.KeySize = 192;
rijndaelManaged.IV = ivvalue;
rijndaelManaged.Key = keyvalue;
rijndaelManaged.Padding = PaddingMode.PKCS7;
rijndaelManaged.Mode = CipherMode.CBC;
using (MemoryStream memoryStream = new MemoryStream())
{
ICryptoTransform transform = rijndaelManaged.CreateEncryptor();
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write))
{
cryptoStream.Write(querystringBytes, 0, querystringBytes.Length);
cryptoStream.FlushFinalBlock();
var output = Convert.ToBase64String(memoryStream.ToArray());
Console.WriteLine($"{output}");
Console.ReadKey();
}
}
}
}正如我所预期的那样,数据加密是因为IV和加密密钥分别有128位和192位长。但是,如果我将加密密钥设置为128位长(为了参数起见,让我们使用与IV相同的字节数组),即
static void Main()
{
var querystrings = "dataToEncrypt";
byte[] keyvalue = new byte[] { 194, 177, 79, 213, 87, 46, 213, 189, 243, 169, 32, 13, 217, 62, 34, 170, };
byte[] ivvalue = new byte[] { 194, 177, 79, 213, 87, 46, 213, 189, 243, 169, 32, 13, 217, 62, 34, 170, };
byte[] querystringBytes = Encoding.UTF8.GetBytes(querystrings);
using (RijndaelManaged rijndaelManaged = new RijndaelManaged())
{
rijndaelManaged.BlockSize = 128;
rijndaelManaged.KeySize = 192;
rijndaelManaged.IV = ivvalue;
rijndaelManaged.Key = keyvalue;
rijndaelManaged.Padding = PaddingMode.PKCS7;
rijndaelManaged.Mode = CipherMode.CBC;
using (MemoryStream memoryStream = new MemoryStream())
{
ICryptoTransform transform = rijndaelManaged.CreateEncryptor();
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write))
{
cryptoStream.Write(querystringBytes, 0, querystringBytes.Length);
cryptoStream.FlushFinalBlock();
var output = Convert.ToBase64String(memoryStream.ToArray());
Console.WriteLine($"{output}");
Console.ReadKey();
}
}
}
}这仍将毫无例外地加密。我的问题是:
当我显式地将KeySize设置为192时,当它接受128位加密密钥时,KeySize内部会做什么呢?为什么不例外呢?
发布于 2016-09-06 15:02:50
钥匙和KeySize类的属性是从基类SymmetricAlgorithm继承的。MSDN中没有详细记录这些属性的确切行为,但是如果您查看SymmetricAlgorithm源代码,您将看到密钥和KeySize属性相互作用,如下所示:
因此,如果您正在设置Key属性,那么事先设置KeySize属性是没有意义的。
https://stackoverflow.com/questions/39275663
复制相似问题