gpt4 book ai didi

python - Hashlib 哈希没有正确比较

转载 作者:太空狗 更新时间:2023-10-30 00:25:34 25 4
gpt4 key购买 nike

这是我的代码:

import hashlib

real = hashlib.sha512("mom")

status = True

while status:
inp = raw_input("What's the password?")
converted = hashlib.sha512(inp)

if converted == real:
print "Access granted!"
status = False
else:
print "Access denied."

我是 hashlib 的新手,我只是在玩弄它。我认为这会做的是验证用户输入的实际密码的哈希值,但是如果您输入正确的密码,它仍然会出现“访问被拒绝”。谁能指出我正确的方向?

最佳答案

您正在比较两个散列对象,而不仅仅是比较它们的摘要。

将您的 if 更改为 if converted.digest() == real.digest() 应该可以。

通过 if converted == real 你实际上是在比较这两个对象,虽然它们代表一个对同一事物进行哈希处理的哈希对象,但它们是不同的对象,因为 hashlib 哈希对象未实现 __cmp____eq____ne__they fall back to comparing the two objects by identity ,因为它们是两个不同的对象,将返回 false。

来自文档链接:

If no __cmp__(), __eq__() or __ne__() operation is defined, class instances are compared by object identity (“address”).

通过对它们执行 dir(),您可以看到这些对象没有实现这些运算符:

>>> test = hashlib.sha512('test')
>>> dir(test)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__',
'__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', 'block_size', 'copy', 'digest',
'digest_size', 'digestsize', 'hexdigest', 'name', 'update']

关于python - Hashlib 哈希没有正确比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6695591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com