【发布时间】:2013-02-05 23:25:22
【问题描述】:
我最近使用 PyCrypto 在一个项目中使用 AES 编写了自己的加密方法。我使用哈希生成一个 32 字节的密码,并使用 CBC 将其提供给 AES-256 位加密。文件输入使用 PKCS#7 填充以符合可被 16 整除的要求。
我可以毫无意外地对文件进行加密和解密,并且最初与输出文件一起加密的输入文件具有相同的 SHA-256 哈希值。
我发现的唯一问题是,如果我提供了错误密码,解密仍然会发生。这是我正在做的事情的一个问题,因为如果密码错误,我需要快速解密失败。
我怎样才能做到这一点?我听说过其他 AES 加密方法,但 PyCrypto 似乎只支持 ECB、CBC、CFB、OFB、CTR 和 OpenPGP。如何实现加密的强 AES,如果没有正确的密码,解密将失败?
【问题讨论】:
-
I've written my own encryption method-- 那是你的问题。 -
加密方法不是我自己写的。我编写了一个使用 AES 作为加密方法的程序。我没有那么愚蠢。
-
AES 只是一个原语(分组密码)。我知道我的“加密方法”是指一种将这个原语(和其他)用于更高级别目的(基于密码的任意数量数据的加密)的方法。这就是我的意思:这仍然是您可能不应该自己做的事情。
-
您能否推荐一种安全的加密方法,它提供 256 位加密,使用强而慢的哈希方法作为密钥,并且可以在不知道文件全长的情况下进行加密?如果有一个满足我所有要求的即插即用解决方案,那将是太棒了。
-
我很确定有现有的解决方案,但我不是专家。至少对于散列部分,有 PBKDF2。专家编写和审查的软件也会定期将流密码应用于任意长度的明文(另一方面,加密人每隔一个月就会提出更复杂的攻击)。至于将两者结合起来,我很难过,但我认为有现有的标准,尽管可能没有开源实现。
标签: python encryption aes