代码之家  ›  专栏  ›  技术社区  ›  Zohar81

在不使用hashlib的情况下对sha摘要结果进行Hexify

  •  0
  • Zohar81  · 技术社区  · 7 年前

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

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

    .digesthex() 从那以后,绳子就不起作用了 str 对象没有该方法。还有别的选择吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   ottomeister    7 年前

    对于原始字符串中的每个字符,使用 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
    

    地图 版本更难阅读,但可能会运行得稍快一些。

    推荐文章