【发布时间】:2012-09-02 20:30:18
【问题描述】:
我很好奇如何使用 python 加密和解密二进制文件。我查看了 pycrypto 库,一些分组密码似乎需要文件长度为 8/16/等的倍数——不知道在处理任意长度的文件时如何处理这个问题(可能未对齐)。我考虑过使用 GPG,但如果我能在 python 中做到这一点,那就太好了。
提前致谢。
【问题讨论】:
标签: python cryptography padding pycrypto
我很好奇如何使用 python 加密和解密二进制文件。我查看了 pycrypto 库,一些分组密码似乎需要文件长度为 8/16/等的倍数——不知道在处理任意长度的文件时如何处理这个问题(可能未对齐)。我考虑过使用 GPG,但如果我能在 python 中做到这一点,那就太好了。
提前致谢。
【问题讨论】:
标签: python cryptography padding pycrypto
顾名思义,任何库的所有分组密码都适用于一定大小的数据块,不多也不少。最著名的 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),可以采用任意大小。
【讨论】:
使用 PythonAES:https://github.com/caller9/pythonaes
这是一个演示如何加密/解密文件的演示。我假设它适用于任何文件大小:https://github.com/caller9/pythonaes/blob/master/demo.py
【讨论】: