如何使用python加密/解密任意长度的二进制文件?

时间:2012-09-09 23:26:13

标签: python cryptography padding pycrypto

我很好奇如何使用python加密和解密二进制文件。我查看了pycrypto库,并且一些块密码似乎需要文件长度为8/16 / etc的倍数 - 在处理任意长度的文件(可能未对齐)时不确定如何处理这个问题。我考虑过淘汰GPG,但是如果我能在python中做到这一点就很棒。

提前致谢。

2 个答案:

答案 0 :(得分:1)

顾名思义,任何库的所有分组密码都可以处理一定大小的数据块,不多也不少。最着名的TDES和AES分别在8和16字节上运行。

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

这是你在后一种情况下使用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),可以采用任何大小。

答案 1 :(得分:0)

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

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