我使用 Python 3 编写了一个小型命令行实用程序来使用 AES 加密单个文件。我相信我们都知道,AES 适用于 16 字节块,所以如果我想加密一个不完全正确的文件16 的倍数,然后我必须填充文件以使其成为 16 的倍数。PKCS #7 填充方案说我应该用 N 个字节填充最后一个块,所有值都是 N。这就是我这样做的方式我的加密功能。
for chunk in getChunks(plainFile, chunkSizeBytes):
padLength = ((AES.block_size - len(chunk)) % AES.block_size)
# We have to have padding!
if padLength == 0:
padLength = 16
pad = chr(padLength) * padLength
chunk += pad.encode('utf-8')
# Write the encrypted chunk to an output file.
cipherFile.write(en.encrypt(chunk))
但是,我不确定我应该如何从解密文件的最后一块中读取这些数据。有没有办法以相反的顺序读入文件?这样做的正确方法是什么?