C# 为什么RijndaelManaged返回的密文每次都不同?
我想使用RijndaelManaged对字符串进行任何加密,因此如果我使用相同的密钥传递加密字符串,我将收到相同的密码文本。 我调用的方法如下所示C# 为什么RijndaelManaged返回的密文每次都不同?,c#,.net,encryption,rijndaelmanaged,C#,.net,Encryption,Rijndaelmanaged,我想使用RijndaelManaged对字符串进行任何加密,因此如果我使用相同的密钥传递加密字符串,我将收到相同的密码文本。 我调用的方法如下所示 public static string GetEncryptedData(string plainText) { var cipher = new RijndaelManaged(); string keyString = "really long string" var key
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")
但每次运行时,它都返回一个diff值。我错过了什么
编辑
正如被接受的答案所指出的那样,我忘记了设置钥匙,所以加上这个就成功了
cipher.Key = Convert.FromBase64String("C53wafJw3QmImGBN8Se9EnIJgiQq7LyoWHzUEFQI/B0=");
因为您没有设置密钥,所以每次调用方法时都会生成不同的密钥,因此会得到不同的密码文本。您应该明确设置
Key
属性,以便始终使用相同的密钥。注意,new RijndaelManaged()
和cipher.CreateEncryptor()
返回实现IDisposable
接口的对象,因此应使用子句将其包装在中,以确保正确的确定性处理。