在不使用hashlib的情况下十六进制sha摘要结果

时间:2018-11-26 11:37:14

标签: python encryption hash sha256 hashlib

我已经获得了字符串格式数据的摘要值,并且我希望将其十六进制化。

这是示例字符串'\xf0z\xd8[\xfc\x7f'

但是,由于我没有创建哈希值所依据的原始数据,因此无法使用hashlib

在字符串上尝试.digesthex()无效,因为str对象没有该方法。还有其他选择吗?

1 个答案:

答案 0 :(得分: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

或者可以使用列表maplambda来代替列表理解,以构建十六进制数字对的列表。

    mystring = '\xf0z\xd8[\xfc\x7f'
    result   = ''.join(map(lambda ch: '{:02x}'.format(ord(ch)), mystring))
    print result

map版本较难阅读,但运行速度可能会稍快。