使用PyCrypto加密/解密大文件 - 策略

时间:2012-04-03 08:23:38

标签: python security encryption encryption-symmetric

我目前正在尝试学习一些有关加密的知识,它的算法以及它的工作原理。我正在考虑一种加密大文件的方法,对我来说唯一可行的方法似乎是使用对称密钥算法。

所以我在看AES,虽然将64k或32k字节块传递给您使用密码哈希创建的AES对象似乎没问题,但我仍然对最安全的方法感到好奇,因为我继续阅读密码学很容易搞砸。

所以我得到一个密码,我得到它的SHA256校验和,我在创建加密/解密对象时使用它作为密钥。

其他我无法找到答案:我应该使用IV吗?如果是这样我必须确保该对象使用与加密时使用的解密相同的IV ...我该怎么做?

为什么我看到周围有人说你应该填写文件的最后一个块,即使字节数可以被16整除?

最好使用哪种加密模式?

您是否可以推荐任何其他资源来了解有关安全/加密的更多信息?

提前谢谢

2 个答案:

答案 0 :(得分:4)

查看你的一些问题。

出于大多数用途,请使用CTR模式或CBC模式。如果您需要内置身份验证,请使用Galois Counter Mode(GCM)。否则,使用单独的HMAC进行身份验证,使用不同的密钥。

所有三种建议模式都需要IV,但在CTR模式下,有时也称为nonce。它可以以明文形式发送,通常预先附加到密文。

应始终使用填充。选择PKCS7或PKCS5,它们实际上是相同的。

要了解密码学,我建议Ferguson和Schneier提出“Practical Cryptography”。我知道有一个名为“Cryptography Engineering”的更新版本,我还没有读过。

答案 1 :(得分:1)

  1. 不要使用密码短语的直接哈希值,而是使用(或创建)KDF
  2. 你绝对是should use IV。您可以将其存储为文件的第一个块。
  3. 我个人可能会使用AES_MODE.CTR - 请参阅Wikipedia for Why?Alex Martelli's answer这个旧问题如何?