每次代码 运行 时,Hashlib 库中的 Sha512 哈希都会产生不同的结果

Sha512 hashing in the Hashlib library producing different results each time the code is run

我正在尝试创建一个可以散列密码的系统,然后我可以存储散列并将散列与输入的密码进行比较。问题是每当我 运行 这段代码时,它产生的散列对于相同的输入是不同的。我发现代码在相同的 运行 上每次执行都会产生相同的输出,但在 运行s 之间不一致。

代码:

import hashlib

def Sha512Hash(Password):
    HashedPassword=hashlib.sha512(Password.encode('utf-8'))
    print(HashedPassword)

Sha512Hash('Hi')
Sha512Hash('Hi')

试试这个代码:

import hashlib

def Sha512Hash(Password):
    HashedPassword=hashlib.sha512(Password.encode('utf-8')).hexdigest()
    print(HashedPassword)

Sha512Hash('Hi')
Sha512Hash('Hi')

你的输出会像这样没有任何问题

45ca55ccaa72b98b86c697fdf73fd364d4815a586f76cd326f1785bb816ff7f1f88b46fb8448b19356ee788eb7d300b9392709a289428070b5810d9b5c2d440d
45ca55ccaa72b98b86c697fdf73fd364d4815a586f76cd326f1785bb816ff7f1f88b46fb8448b19356ee788eb7d300b9392709a289428070b5810d9b5c2d440d

您好,您很可能误解了输出。

我保存了您的脚本并使用 python2 和 python3 调用了它。 Python3 重用了对象(或其地址),但 python2 创建了新对象。

python2 x.py 
<sha512 HASH object @ 0x7f47a870bc30>
<sha512 HASH object @ 0x7f47a870bc00>

python3 x.py
<sha512 _hashlib.HASH object @ 0x7fb842d51bb0>
<sha512 _hashlib.HASH object @ 0x7fb842d51bb0>

@后面是内存地址。但是,如果您更改脚本,它会打印 hexdigest(以十六进制表示)。您将能够看到它按预期工作。

def Sha512Hash(Password):
    HashedPassword = hashlib.sha512(Password.encode('utf-8'))
    print(HashedPassword)
    print(HashedPassword.hexdigest())

更改脚本的调用:

python2 x.py
<sha512 HASH object @ 0x7f2bbe8dbc30>
45ca55ccaa72b98b86c697fdf73fd364d4815a586f76cd326f1785bb816ff7f1f88b46fb8448b19356ee788eb7d300b9392709a289428070b5810d9b5c2d440d
<sha512 HASH object @ 0x7f2bbe8dbc00>
45ca55ccaa72b98b86c697fdf73fd364d4815a586f76cd326f1785bb816ff7f1f88b46fb8448b19356ee788eb7d300b9392709a289428070b5810d9b5c2d440d

python3 x.py
<sha512 _hashlib.HASH object @ 0x7f41df832bb0>
45ca55ccaa72b98b86c697fdf73fd364d4815a586f76cd326f1785bb816ff7f1f88b46fb8448b19356ee788eb7d300b9392709a289428070b5810d9b5c2d440d
<sha512 _hashlib.HASH object @ 0x7f41df832bb0>
45ca55ccaa72b98b86c697fdf73fd364d4815a586f76cd326f1785bb816ff7f1f88b46fb8448b19356ee788eb7d300b9392709a289428070b5810d9b5c2d440d