2

我使用 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))

但是,我不确定我应该如何从解密文件的最后一块中读取这些数据。有没有办法以相反的顺序读入文件?这样做的正确方法是什么?

4

1 回答 1

1

我应该用 N 个字节填充最后一个块,所有的值都是 N。

在这句话中,第一个 N 等于第二个 N,这意味着字节的值决定了您需要删除多少字符才能进行解码。

例如,如果您的最后一个块中只有 9 个字符,则用7个值为7的字符填充(7 结果是 BEL 字符,但这没关系)。

于 2013-09-06T12:56:19.553 回答