【发布时间】:2015-05-22 20:12:23
【问题描述】:
我想使用 RijndaelManaged 对带有任何加盐的字符串进行加密,因此如果我使用相同的密钥对字符串进行加密,我将收到相同的密文。 我调用的方法是这样的
public static string GetEncryptedData(string plainText)
{
var cipher = new RijndaelManaged();
string keyString = "really long string"
var key = Encoding.UTF8.GetBytes(keyString);
cipher.Padding = PaddingMode.Zeros;
cipher.Mode = CipherMode.ECB;
cipher.KeySize = 256;
cipher.BlockSize = 256;
var cryptoTransform = cipher.CreateEncryptor();
byte[] stuffToEncrypt = Encoding.UTF8.GetBytes(plainText);
byte[] cipherText = cryptoTransform.TransformFinalBlock(stuffToEncrypt, 0, plainText.Length);
return Convert.ToBase64String(cipherText);
}
我想如果我设置
cipher.Padding = PaddingMode.Zeros;
cipher.Mode = CipherMode.ECB;
不会引入随机性,并且每次使用相同的输入调用此方法时结果都相同
GetEncryptedData("somestring")
但每次运行它都会返回一个差异值。我错过了什么?
编辑
正如在接受的答案中指出的那样,我忘了设置密钥,所以添加这个就可以了
cipher.Key = Convert.FromBase64String("C53wafJw3QmImGBN8Se9EnIJgiQq7LyoWHzUEFQI/B0=");
【问题讨论】:
-
请注意,
new RijndaelManaged()和cipher.CreateEncryptor()返回实现IDisposable接口的对象,因此应将其包装在using子句中以确保正确的确定性处理。
标签: c# .net encryption rijndaelmanaged