2

RubyコードをPythonに変換しようとしています。この行に問題があります:

Digest::MD5.digest(message).unpack('L*')

structモジュールとモジュールを使用する必要があると思いますが、使用するhashlib場合:

struct.unpack('L', hashlib.md5(message).digest())

次のエラーが表示されます。

struct.error: unpack requires a bytes object of length 4

私は何をすべきか?ありがとうございました、

ルービック

PS 出力は、4 x 32 ビット整数のリストである必要があります。

irb(main):039:0> Digest::MD5.digest('Hash').unpack('L*')
=> [631892218, 1967199614, 3683860954, 4130231798]
4

3 に答える 3

2

struct.unpack('L', ...)パラメーターから単一の long のみをアンパックします。Ruby とは異なり、Python の unpack 関数には任意の量の値を展開する機能がなく、代わりに書式指定子を繰り返す必要があります。

hash = hashlib.md5(message).digest()
struct.unpack('L' * (len(hash) / 4), hash)

これは'L'、文字列が許可する回数だけ繰り返し、ハッシュ内のすべての int をアンパックし、len / 4 項目を含むタプルを返します。結果をリストとして取得したい場合は、単純に を使用してリストにキャストしlist()ます。

于 2012-07-12T08:18:57.017 に答える