如何验证 AES 解密是否成功?

How to validate AES decryption was successful?

我正在开发本地文件 encryption/decryption 软件 (AES-256 CBC), 我想验证解密是否成功。

所以我决定在明文数据的末尾添加一个额外的明文数据的 MD5 散列并一起加密, 解密时,计算解密数据的MD5哈希值(除了最后一个附加的MD5哈希值)和 将它与最后一个附加的 MD5 哈希值进行比较。

我想知道这个想法是否可以安全使用。

这是个坏主意吗?

您也可以使用MAC来验证您的解密。 MAC 和哈希码之间的主要区别是概念上的。哈希用于保证数据的完整性,MAC 保证完整性和身份验证。

这意味着哈希码是在没有任何外部输入的情况下从消息中盲目生成的:您获得的是可用于检查消息在传输过程中是否有任何更改的东西。

A MAC 改为使用私钥作为它在生成代码时使用的哈希函数的种子:这应该向接收方保证,不仅消息没有被修改,而且谁也没有被修改发送它是我们所期望的:否则攻击者无法知道用于生成代码的私钥。

Cryptographic primitive | Hash |    MAC    | Digital
Security Goal           |      |           | signature
------------------------+------+-----------+-------------
Integrity               |  Yes |    Yes    |   Yes
Authentication          |  No  |    Yes    |   Yes
Non-repudiation         |  No  |    No     |   Yes
------------------------+------+-----------+-------------
Kind of keys            | none | symmetric | asymmetric
                        |      |    keys   |    keys

我在许多帖子中读到 MD5 不再安全,但是您将其用作校验和而不是会话 ID 或密码哈希。如果对 MD5 的攻击不是问题,因为它在加密代码中并且没有被用作密码哈希、会话 ID 或类似的东西,我认为你可以使用它,但如果你想在安全方面更改 SHA-2 摘要的 MD5。