在python中恢复salted和哈希密码

时间:2014-12-14 18:57:29

标签: python authentication hash passwords salt

我已经设法使用此方法加密和哈希密码:

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

如何撤消此过程以恢复实际密码?

更新:您应该从用户那里获取密码,对他们的密码应用相同的salt和hash方法,然后将其与最初的salted / hashed密码进行比较,看看它们是否匹配。这很有道理。

3 个答案:

答案 0 :(得分:3)

你没有。哈希是一种只有一种方法的技术。这是散列的重点。

如果您的数据库中有信息泄漏,您永远不会存储原始密码以保护您的用户。

如果你想实施一些“密码恢复”程序,你需要按照每个人的意思去做,发送一封电子邮件给一个临时链接的人发送一个随机生成的新密码重置密码。

答案 1 :(得分:0)

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

然而,有simple-crypt如果你想要" 2方式"它可能是你正在寻找的东西。散列。

答案 2 :(得分:0)

好问题。

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

出于某些原因,这被认为是一种糟糕的安全措施。

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

  • 其次,哈希是一种单向加密形式,您可以将密码变为乱码。散列的最大价值在于,相同的密码将始终变为相同的乱码:每次都是如此。这意味着您可以在不存储原始密码的情况下进行密码匹配。你应该散列密码而不是像AES-256这样的双向加密的原因是双向加密需要创建,管理和保护加密密钥,这很难。对于绝大多数开发人员而言,散列更容易,更安全。

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

这样,即使攻击者获得了某人的电子邮件帐户(gmail等),他们也只能在有限的时间内受到损害。

有很多方法可以自己完成这些工作,但是获得一次性使用令牌的简单方法就是将用户管理卸载到像Stormpath这样的微服务器上。它负责所有用户管理:密码重置,密码存储,用户配置文件,身份验证,加密,散列等。

例如,如果你想在Flask网络应用中实现类似的功能,你可以使用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工作,但无论您使用什么,这些规则都适用,并帮助提高应用程序的安全性。