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

明らかに、上記の 2 行目は間違っています。input_chunk_remainder最初の文字列を 1 バイト文字列に変換する必要があります。Pythonでこれを行うにはどうすればよいですか?

4

2 に答える 2

6

指定された値の 1 バイトを作成するには、次のchr()関数を使用できます。

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

bytearray()または、適切な数の整数でa を使用できます。

>>> 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ビルトインは一連の整数を受け入れます。したがって、整数が 1 つだけの場合:

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

もちろん、これは文字列ではなくバイトです。しかし、Python3 の世界では、OP はおそらく彼が説明したアプリにバイトを使用するでしょう。

于 2020-01-08T05:49:34.680 に答える