繁体   English   中英

AES使用无效的IV正确解密了一半的字符串,这很正常吗?

[英]AES decrypts half of string correctly with invalid IV, Is that usual?

我正在从此示例测试AES加密功能。 我发现如果将IV更改为另一个随机数据,则只有一部分文本将变得不可访问,而另一部分将被正确解密。

这是我的代码:

    public static string encrypt(string original, string key, string iv)
    {
        string enc;
        // Create a new instance of the RijndaelManaged
        // class.  This generates a new key and initialization 
        // vector (IV).
        // Encrypt the string to an array of bytes.
        byte[] encrypted =EncryptStringToBytes_Aes(original, Convert.FromBase64String(key), Convert.FromBase64String(iv));

        enc = Convert.ToBase64String(encrypted);

        return enc;
    }

    public static string decrypt(string encrypted, string key, string iv)
    {
        string decrypted;

        decrypted = DecryptStringFromBytes_Aes(Convert.FromBase64String(encrypted), Convert.FromBase64String(key), Convert.FromBase64String(iv));

        return decrypted;
    }

这些是我的EncryptStringToBytes_AesDecryptStringFromBytes_Aes函数。

例如,我的输入字符串是Hello, I think Hugo is a great movie! 它将被加密到lbMvxzBtu057yeNV5d/5MC7tlau7zfRXMtfLSUOBa7ueMGqRrm23H5uYGLmDcdJ3base64edgbpldgjBitwQXrQbbyHr+5J0cXADYAm+po8B29rYVJc=base64ed IV Ti7OcORScdXS/Ll7m1KdeQ== (我正在获取base64ed键和IV作为函数的输入,并在函数中对其进行解码,如上面的代码所示)

现在,如果我改变四m4u5eqD7BZP11P5PYGfV7Q==但不要触摸键,然后尝试解密加密的字符串,我给这样的结果: f+ T\\/] ^h ugo is a great movie!

如您所见,输入字符串的一部分( ugo is a great movie! )已成功解密。 那是平常的吗? 如果是,如何预防? 还有其他比这更安全的算法吗? 如果没有,我的代码有什么问题?

如果使用CBC,则错误的IV仅会阻止解密第一个块,即在AES情况下的前16个字节。 这是设计使然,而不是弱点。

请参阅如果知道密钥,可以解密CBC密文,但不能解密IV吗? 有关CBC如何对待IV的详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM