5

我现在在 Python 中实现 PKCS#7 填充,需要填充我的文件块,以便达到可被 16 整除的数字。我被推荐使用以下方法来附加这些字节:

input_chunk += '\x00'*(-len(input_chunk)%16)

我需要做的是以下几点:

input_chunk_remainder = len(input_chunk) % 16
input_chunk += input_chunk_remainder * input_chunk_remainder

显然,上面的第二行是错误的;我需要将第input_chunk_remainder一个转换为单字节字符串。我怎样才能在 Python 中做到这一点?

4

2 回答 2

6

要创建给定值的一个字节,您可以使用以下chr()函数

>>> chr(5)
'\x05'
>>> chr(5) * 5
'\x05\x05\x05\x05\x05'

或者您可以使用 abytearray()具有正确数量的整数:

>>> str(bytearray(5 * [5]))
'\x05\x05\x05\x05\x05'

或使用array.array()相同的:

>>> import array
>>> array.array('B', 5*[5]).tostring()
'\x05\x05\x05\x05\x05'

或使用该struct.pack()函数将整数打包成字节:

 >>> import struct
 >>> struct.pack('{}B'.format(5), *(5 * [5]))
 '\x05\x05\x05\x05\x05'

可能有更多的方法.. :-)

于 2013-02-19T20:45:14.783 回答
2

在 Python3 中,bytes内置函数接受整数序列。所以对于一个整数:

>>> bytes([5])
b'\x05'

当然,那是字节,而不是字符串。但是在 Python3 世界中,无论如何,OP 可能会为他描述的应用程序使用字节。

于 2020-01-08T05:49:34.680 回答