不使用 hashlib 的 Hexify sha 摘要结果

Hexify sha digest result without using hashlib

我有字符串格式的数据摘要值,我想对其进行十六进制化。

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

但是,我无法使用 hashlib,因为我没有创建哈希的原始数据。

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

对于原始字符串中的每个字符,使用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 版本更难阅读,但可能 运行 稍微快一些。