我正在生成一个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。
虽然无法告诉确定使用哪种编码,但有些编码没有无效值,例如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
包的文档为您提供了可以指定用于编码的内容的完整列表。