首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hashlib哈希不能正确比较

Hashlib哈希不能正确比较
EN

Stack Overflow用户
提问于 2011-07-14 23:16:02
回答 3查看 4.5K关注 0票数 6

下面是我的代码:

代码语言:javascript
复制
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的新手,我只是在玩弄它。我认为这将验证用户对实际密码的散列的输入,但是如果您输入了正确的密码,它仍然显示“访问被拒绝”。有谁能给我指个方向吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-14 23:19:51

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

将您的if更改为if converted.digest() == real.digest(),这应该会起作用。

通过执行if converted == real,您实际上是在比较这两个对象,虽然它们表示散列到同一事物的散列对象,但它们是不同的对象,并且由于hashlib散列对象不实现__cmp____eq____ne__,因此they fall back to comparing the two objects by identity将返回false,因为它们是两个不同的对象。

在文档链接中:

如果未定义__cmp__()__eq__()__ne__()操作,则按对象标识(“address”)比较类实例。

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

代码语言:javascript
复制
>>> 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']
票数 14
EN

Stack Overflow用户

发布于 2011-07-14 23:20:14

如果您比较这些摘要,这应该是可行的:

代码语言:javascript
复制
if converted.digest() == real.digest():
   ...
票数 4
EN

Stack Overflow用户

发布于 2011-07-14 23:23:26

您正在创建两个不同的hashlib对象,它们并不相等。您需要做的是比较摘要:

代码语言:javascript
复制
if converted.digest() == real.digest():
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6695591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档