如果密码无效,则 AES 解密失败

2024-01-12

我在最近使用 PyCrypto 进行的项目中使用 AES 编写了自己的加密方法。我使用哈希生成 32 字节密码,并使用 CBC 将其提供给 AES-256 位加密。文件输入使用 PKCS#7 填充进行填充,以符合可被 16 整除的要求。

我可以毫无意外地加密和解密文件,并且最初加密的输入文件与输出文件具有相同的 SHA-256 哈希值。

我发现的唯一问题是,如果我提供wrong密码短语,解密仍然发生。这对于我正在做的事情来说是一个问题,因为如果密码错误,我需要让解密快速失败。

我怎样才能做到这一点?我听说过其他 AES 加密方法,但 PyCrypto 似乎只支持 ECB、CBC、CFB、OFB、CTR 和 OpenPGP。如何实现加密强度高的 AES,如果没有正确的密码短语,解密将失败?


确保密文在更改后不会被解密的最佳方法是添加身份验证标签。身份验证标签用于提供密文的身份验证和完整性。

该标签可能由密文上的 MAC(例如 AES-CMAC 或使用 SHA-256 的 HMAC)组成。然而,这需要第二个密钥才能保证安全。

另一种方法是使用经过身份验证的加密,例如 GCM。 GCM 使用单个密钥并生成身份验证标签(大小可以配置)。

确保您使用正确生成的 IV。 IV 可以作为密文的前缀,并且should计算身份验证标签时包含在内),并且不要忘记纯文本的大小可能不会被隐藏。

您应该验证标签的正确性before密文的解密。

请注意,一般情况下,您不应加密密码,除非您稍后需要访问精确的密码。要验证密码,请改用 PBKDF2。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果密码无效,则 AES 解密失败 的相关文章

随机推荐