繁体   English   中英

在python中恢复盐腌和哈希密码

[英]Recover a salted and hashed password in python

我已经设法使用这种方法对密码加盐和哈希:

import hashlib, uuid
salt = uuid.uuid4().hex
hashed_password = hashlib.sha512(password + salt).hexdigest()

如何恢复该过程以恢复实际密码?

更新:您应该从用户那里获得密码,对他们的密码应用相同的salt和hash方法,然后将其与原始的salt / hash密码进行比较,以查看它们是否匹配。 这是很合理的。

你不知道 哈希是一种仅是一种方法的技术。 这就是散列的全部要点。

如果您在数据库中泄漏了信息,则永远不会存储原始密码来保护用户。

如果要实现一些“密码恢复”过程,则需要像每个人一样进行操作,向具有临时链接的人员发送电子邮件,以在发送随机生成的新密码时重置密码。

哈希是一种方法,因为您只能加密(例如)一个字符串,然后将用户提供的哈希与您的应用程序生成的哈希进行比较。

但是,这里有一个简单的crypt ,它可能是您想要“ 2向”散列的内容。

好问题。

首先,永远不要以明文形式向用户发送密码!

由于某些原因,它被认为是不良的安全做法。

  • 如果任何人都可以访问用户的电子邮件帐户(gmail等),则他们拥有密码并可以劫持该用户帐户。

  • 其次,哈希是一种单向加密形式,您可以将密码变成乱码。 散列的最大价值在于,每次都会将相同的密码转换成相同的乱码。 这意味着您无需存储原始密码即可进行密码匹配。 您应该散列密码而不执行像AES-256这样的2通道加密的原因是2通道加密需要创建,管理和保护可能很难的加密密钥。 对于大多数开发人员而言,散列变得更容易,更安全。

您应该向用户发送指向安全页面的链接,而不是通过向用户发送密码来实现密码重置的工作,在该页面中,他们可以使用一次性令牌重置密码,该令牌在一段时间后会过期。

这样,即使攻击者拥有了某人的电子邮件帐户(gmail等),也只能在有限的时间内造成损害。

有多种方法可以自己完成此工作,但是获取无需存储或管理的一次性使用令牌的一种简单方法是将用户管理工作转移到Stormpath之类的微服务中 ,该服务可以处理所有您的用户管理:密码重设,密码存储,用户配置文件,身份验证,加密,哈希等。

例如,如果您想在Flask Web应用程序中实现类似的功能,则可以使用Flask-Stormpath库,如下所示:

from flask import Flask
from flask.ext.stormpath import StormpathManager

app = Flask(__name__)
app.config['STORMPATH_ENABLE_FORGOT_PASSWORD'] = True

stormpath_manager = StormpathManager(app)

app.listen(3000)

注意 :我在Stormpath工作,但是无论您使用什么,这些规则都适用,并有助于使任何应用程序更安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM