【问题标题】:Can't completely understand how hashing works {python}无法完全理解散列的工作原理{python}
【发布时间】:2019-07-27 14:28:20
【问题描述】:

我正在尝试创建一个简单的软件,其中包含有密码的用户。我认为与其将代码中的密码保存为文本,不如尝试了解一下哈希的工作原理。然后我尝试将 hashlib 库用于 python。 对我来说,这段代码应该能够看到密码 x 和 y 匹配,因此继续假设的“登录”,但由于某种原因,它并没有做我想要做的事情。有语法错误吗?密码匹配是否以不同的方式工作?我需要帮助让软件比较 2 个哈希值并因此登录。

import hashlib

pw1=hashlib.md5(input("please enter your password").encode('utf-8'))
pw2=hashlib.md5(input("please re-enter your password").encode('utf-8'))

if pw1.hexdigest == pw2.hexdigest:
    print("Success. Passwords match")
if pw1.hexdigest != pw2.hexdigest:
    print("Failure. Passwords do not match")

【问题讨论】:

  • 对于密码哈希,这个thread 是一个有用的起点。请注意,使用 md5sum 对密码进行哈希处理并不是一种好的/安全的方法,并且在该线程中有更详细的说明,说明了所做的工作以及如何以更安全的方式执行此操作。
  • @metatoaster 谢谢!该线程对于散列密码的方法非常有帮助,但是我读过的许多其他人也主要谈论为什么 md5 不好或为什么 bcrypt 好,但我想我被困在更早的一步,我使用 md5 只是因为它突然出现在我的脑海中,并且在编写软件本身时实际上不会这样做。但是我仍然不明白为什么 python 没有像我想象的那样比较哈希。

标签: python hash md5


【解决方案1】:

hashlib 实例的hexdigest 部分是函数本身。你必须调用它:

hex1 = pw1.hexdigest()
hex2 = pw2.hexdigest()

例如。现在您可以比较两个字符串hex1hex2

(作为metatoaster said in a comment,不要使用md5。)

请注意,顺便说一下,pw1pw2 是哈希器的实例:您可以向它们提供更多数据。在这种情况下,这样做没有意义,但是:

pw1.update(b'more data')

修改下一次调用pw1.hexdigest() 返回的内容。

【讨论】:

  • 我试过声明你说的 2 个变量,然后在 if 条件中比较它们。而不是 pw1.hexdigest(),但它仍然无法正常工作。如果我误解了,请原谅。编辑:我犯了一个语法错误。没关系它完美地工作。非常感谢!
  • 另一个旁注:你不需要变量——如果你愿意,你可以一遍又一遍地调用hexdigest()——但我认为使用它们会更清楚。
猜你喜欢
  • 1970-01-01
  • 2014-04-08
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
相关资源
最近更新 更多