I'm generating a argon2d hash and wanted to compare it with hashstring from my database.
For hashing I use this function:
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)
And my output is:
b'\x0c\xd1\xe3\xf0\x0f\x03<\xa0\xa99\xee\x85I\xc8\xcb\xb0'
I tried to use argon2Hasher.decode(encoding="ascii") which resulted in:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 1: ordinal not in range(128)
And I also tried the same command with encoding="utf-8" but this resulted in UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 1: invalid continuation byte
How can I convert it into plaintext (normal String)?
I'm using Python 3.6.
While there is no way to tell for sure what encoding to use, there are some encoding that do not have invalid values, like e.g.
latin1, trying that on your data yields this:The documentation of the
codecspackage, provides you with a comprehensive list of what you can specify for encoding.However, I think you are asking yourself the wrong question. If the
bytesyou show are meant to represent a hash, then a conversion tostris not really desireable since, as you are experimenting yourself, this must also include an encoding for this to be "interpreted". On the contrary,bytesisbytesand no extra encoding is needed. This is the same reason that alsohashlibworks primarily withbytes.