2

私はPyCryptoとpython2.7.3を使用しています。チェーンハッシュを作成するためにハッシュの前に通常の文字列を追加しようとしていますが、形式の一貫性を保つために、バイナリ形式ではなく「印刷」形式の文字列が必要です。バイナリ文字列を操作可能な「通常の」文字列に変換する方法はありますか?

from Crypto.Hash import SHA256
h = SHA256.new()
s = h.digest() #return binary "non-printable" digest

s
>>>"\xe3\xb0\xc4B\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99o\xb9$'\xaeA\xe4d\x9b\x93L\xa4\x95\x99\x1bxR\xb8U"
print(s)
>>> ã°ÄB˜üšûôÈ™o¹$'®Aäd›“L¤•™xR¸U

助けてくれてありがとう

4

3 に答える 3

4

s対話型インタープリターに入力するときに表示されるのは、文字列の表現です。これがどのように見えるかを気にする必要はありません。実際の文字列の内容は、print を使用したときに出力されるものです。print文字列にはすでにその内容含まれているため、使用時に文字列を出力されるものに「変換」する方法はありません。

于 2012-07-06T10:32:27.997 に答える
1

.hexdigest()代わりに使用してみてください。文字列表現を 16 進数として取得します。

于 2012-07-06T10:34:47.513 に答える
1

私が正しいかどうかはわかりませんが、16 進表現を意味する場合binasciiは、std-lib の -module を調べることができます。

from binascii import b2a_hex #bin to ascii: hex-format
print b2a_hex(s)
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'

文字列を s の前に追加したい場合は、Sven Marnach が言ったように、印刷される内容を気にせず、プレフィックスに s を追加するだけです。

prefix = 'username:'
combined_string = prefix + s
于 2012-07-06T11:26:56.970 に答える