2

我正在使用 PyCrypto 和 python 2.7.3。我正在尝试将常规字符串添加到散列以创建链式散列,但为了保持格式一致,我需要“打印”形式的字符串 s 而不是二进制形式。有没有办法将二进制字符串转换为可操作的“正常”字符串?

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()改用。您将得到一个字符串表示为十六进制数字。

于 2012-07-06T10:34:47.513 回答
1

不确定我是否正确,但如果您的意思是十六进制表示,您可以查看binasciistd-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 回答