我想使用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属性,以便始终使用相同的键。

10-08 02:32