【问题标题】:Hexify sha digest result without using hashlibHexify sha 摘要结果而不使用hashlib
【发布时间】:2019-04-28 01:11:01
【问题描述】:
我有字符串格式的数据摘要值,我想对它进行十六进制化。
这是示例字符串'\xf0z\xd8[\xfc\x7f'
但是,我不能使用hashlib,因为我没有创建哈希的原始数据。
在字符串上尝试.digesthex() 将不起作用,因为str 对象没有该方法。有没有其他选择?
【问题讨论】:
标签:
python
encryption
hash
sha256
hashlib
【解决方案1】:
对于原始字符串中的每个字符,使用ord获取该字符的数值,然后使用字符串格式操作将该数值表示为包含一对十六进制数字字符的字符串。将这些两位数的字符串累积成一个字符串。
mystring = '\xf0z\xd8[\xfc\x7f'
result = ''
for ch in mystring:
number = ord(ch)
hexdigits = '{:02x}'.format(number)
result += hexdigits
print result
您可以在一行上完成所有这些操作,方法是使用列表推导将十六进制数字字符串对收集到一个列表中,然后使用带有空分隔符字符串的join 方法将十六进制数字字符串粘合在一起形成一个单个字符串。
mystring = '\xf0z\xd8[\xfc\x7f'
result = ''.join([ '{:02x}'.format(ord(ch)) for ch in mystring ])
print result
或者,您可以使用 map 和 lambda 来构建十六进制数字对列表,而不是列表解析。
mystring = '\xf0z\xd8[\xfc\x7f'
result = ''.join(map(lambda ch: '{:02x}'.format(ord(ch)), mystring))
print result
map 版本更难阅读,但运行速度可能稍快。