Naf*_*Kay 5 python encryption aes
我最近使用 PyCrypto 在一个项目中使用 AES 编写了自己的加密方法。我使用哈希生成一个 32 字节的密码,并使用 CBC 将其提供给 AES-256 位加密。文件输入使用 PKCS#7 填充填充以符合可被 16 整除。
我可以毫无意外地加密和解密文件,并且最初与输出文件一起加密的输入文件具有相同的 SHA-256 哈希值。
我发现的唯一问题是,如果我提供了错误的密码,解密仍然会发生。这是我正在做的事情的一个问题,因为如果密码错误,我需要快速解密失败。
我怎样才能做到这一点?我听说过其他 AES 加密方法,但 PyCrypto 似乎只支持 ECB、CBC、CFB、OFB、CTR 和 OpenPGP。如何实现加密强度高的 AES,如果没有正确的密码,它会无法解密?
确保您的密文在更改后不会解密的最佳方法是添加身份验证标签。认证标签用于提供密文的认证和完整性。
该标签可能包含密文上的 MAC(例如,使用 SHA-256 的 AES-CMAC 或 HMAC)。然而,这需要第二个密钥来保证安全。
另一种方法是使用经过身份验证的加密,例如 GCM。GCM 使用单个密钥并生成一个认证标签(大小可以配置)。
确保您使用正确生成的 IV。IV 可以作为密文的前缀,并且在计算身份验证标签时应该包括在内),并且不要忘记您的纯文本的大小可能不会被隐藏。
在解密密文之前,您应该验证标签的正确性。
请注意,一般情况下,您不应加密密码,除非您以后需要访问准确的密码。要验证密码,请改用 PBKDF2。
AES(或任何其他加密算法)无法让您知道您是否拥有正确的密钥。也就是说,当您确实想在数学领域之外使用密码学时,这是一个非常有用的功能。
您需要做的是在消息的开头添加一个具有已知值的块,这样在解密第一个块后,您可以将其与已知值进行比较,并知道您是否拥有错误的密钥。如果您要加密的数据具有已知的标头,您可以使用它。
或者,您可以随消息一起发送密钥的加密哈希(例如 SHA-256),攻击者只有在能够破坏哈希的情况下才能恢复密钥。
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |