【问题标题】:Recover a salted and hashed password in python在 python 中恢复加盐和散列的密码
【发布时间】:2015-02-12 21:19:59
【问题描述】:

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

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

如何反转此过程以恢复实际密码?

更新:您应该从用户那里获取密码,对他们的密码应用相同的加盐和哈希方法,然后将其与最初加盐/散列的密码进行比较,看看它们是否匹配。这很有意义。

【问题讨论】:

  • 如果多个密码可以散列到相同的值,我选择的方法发生这种情况的概率是多少?它必须非常低。
  • 碰撞的概率真的很低。散列函数被设计为具有很大的熵,这意味着对于两个关闭的输入,输出将很远。散列函数将任何东西(无限空间)映射到大小为2**X X 通常为 32 或 64 的有限空间中,因此会发生冲突,但由于强熵,任何具有几乎相同标记甚至相同数量标记的东西都会在哈希空间中彼此远离。

标签: python authentication hash passwords salt


【解决方案1】:

你没有。散列是一种只有一种方式的技术。这就是散列的重点。

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

如果你想实现一些“密码恢复”程序,你需要像大家一样,发送一封电子邮件给这个人,其中包含一个临时链接来重置密码,发送一个随机生成的新密码。

【讨论】:

  • 或者您使用了一个非常糟糕的不安全密码编码方案(请注意,我没有说加密......)(可能值得注意的是,您无法取消映射散列的原因是许多密码可以散列到相同的值...)
【解决方案2】:

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

但是,有simple-crypt,如果您想要“2 路”散列,它可能就是您正在寻找的。​​p>

【讨论】:

    【解决方案3】:

    好问题。

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

    出于几个原因,这被认为是一种糟糕的安全做法。

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

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

    与其通过向用户发送密码来实现密码重置,不如向用户发送一个指向安全页面的链接,在该页面中,他们可以使用在一定时间后过期的一次性令牌重置密码。

    这样,即使攻击者获得了某人的电子邮件帐户(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 工作,但无论您使用什么,这些规则都适用,有助于提高任何应用程序的安全性。

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 2015-02-17
      • 2015-08-20
      • 2014-06-10
      • 2011-06-02
      • 2011-10-29
      • 2011-07-27
      • 1970-01-01
      相关资源
      最近更新 更多