【问题标题】:How do I encrypt/decrypt a binary file of arbitrary length using python?如何使用 python 加密/解密任意长度的二进制文件?
【发布时间】:2012-09-02 20:30:18
【问题描述】:

我很好奇如何使用 python 加密和解密二进制文件。我查看了 pycrypto 库,一些分组密码似乎需要文件长度为 8/16/等的倍数——不知道在处理任意长度的文件时如何处理这个问题(可能未对齐)。我考虑过使用 GPG,但如果我能在 python 中做到这一点,那就太好了。

提前致谢。

【问题讨论】:

标签: python cryptography padding pycrypto


【解决方案1】:

顾名思义,任何库的所有分组密码都适用于一定大小的数据块,不多也不少。最著名的 TDES 和 AES 分别对 8 字节和 16 字节块进行操作。

为了使用除此之外的长度,您还必须选择一个操作模式。所有模式都使得数据可以比块大小更长(甚至更短)。但是,对于某些人来说,数据必须与其保持一致(例如 CBC)。对于其他人(例如分段大小为 1 的 CTR),您根本没有任何限制。

这就是你在后一种情况下使用 PyCrypto 的方式(来自API description):

from Crypto.Cipher import AES
from Crypto import Random

key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn')

如您所见,消息的长度为 14 个字节 (!= 16),可以采用任意大小。

【讨论】:

    【解决方案2】:

    使用 PythonAES:https://github.com/caller9/pythonaes

    这是一个演示如何加密/解密文件的演示。我假设它适用于任何文件大小:https://github.com/caller9/pythonaes/blob/master/demo.py

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      相关资源
      最近更新 更多