【问题标题】:Why is cipher text returned from RijndaelManaged different each time?为什么每次从 RijndaelManaged 返回的密文都不一样?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2012-04-07
    相关资源
    最近更新 更多