1

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

提前致谢。

4

2 回答 2

1

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

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

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

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),它可以采用任意大小。

于 2012-09-10T04:46:20.590 回答
0

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

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

于 2012-09-09T23:51:05.270 回答