Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么RijndaelManaged返回的密文每次都不同?_C#_.net_Encryption_Rijndaelmanaged - Fatal编程技术网

C# 为什么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

我想使用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")
但每次运行时,它都返回一个diff值。我错过了什么

编辑

正如被接受的答案所指出的那样,我忘记了设置钥匙,所以加上这个就成功了

cipher.Key = Convert.FromBase64String("C53wafJw3QmImGBN8Se9EnIJgiQq7LyoWHzUEFQI/B0=");

因为您没有设置密钥,所以每次调用方法时都会生成不同的密钥,因此会得到不同的密码文本。您应该明确设置
Key
属性,以便始终使用相同的密钥。

注意,
new RijndaelManaged()
cipher.CreateEncryptor()
返回实现
IDisposable
接口的对象,因此应使用
子句将其包装在
中,以确保正确的确定性处理。