-1

我正在生成一个 argon2d 哈希,并想将它与我的数据库中的哈希字符串进行比较。

对于散列,我使用这个函数:

    import argon2

    argon2Hasher = argon2.hash_password_raw(b"password", b"TESTTESTTESTTEST" ,time_cost=16, memory_cost=512, parallelism=1, hash_len=16,     type=argon2.Type.D) #argon2.low_level.Type.D)
    print(argon2Hasher)

我的输出是:

b'\x0c\xd1\xe3\xf0\x0f\x03<\xa0\xa99\xee\x85I\xc8\xcb\xb0'

我尝试使用argon2Hasher.decode(encoding="ascii")它导致: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 1: ordinal not in range(128) 我也尝试了相同的命令,encoding="utf-8"但这导致UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 1: invalid continuation byte

如何将其转换为纯文本(普通字符串)?

我正在使用 Python 3.6。

4

1 回答 1

0

虽然无法确定要使用什么编码,但有些编码没有无效值,例如latin1,在您的数据上尝试会产生以下结果:

s = b'\x0c\xd1\xe3\xf0\x0f\x03<\xa0\xa99\xee\x85I\xc8\xcb\xb0'
repr(s.decode('latin1'))
# "'\\x0cÑãð\\x0f\\x03<\\xa0©9î\\x85IÈË°'"

包的文档codecs为您提供了可以为编码指定的内容的完整列表。


但是,我认为您在问自己一个错误的问题。如果bytes您显示的内容旨在表示一个哈希,那么转换str为并不是真正需要的,因为当您自己进行试验时,这还必须包括一个编码以便“解释”。相反,bytesbytes并且不需要额外的编码。这与hashlib主要适用于bytes.

于 2020-04-06T09:40:33.447 回答