当前位置: 首页 > 知识库问答 >
问题:

在python中恢复经过加密和哈希处理的密码

陆伟
2023-03-14

我已使用此方法对密码进行了加密和哈希处理:

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

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

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

共有3个答案

单于奕
2023-03-14

好问题。

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

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

>

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

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

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

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

  • 王英彦
    2023-03-14

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

    然而,有一个简单的crypt,如果您想要“双向”哈希,它可能就是您想要的。

    李永寿
    2023-03-14

    你没有。哈希是一种技术,它只是一种方法。这就是散列的全部要点。

    如果数据库中出现信息泄漏,则从不存储原始密码以保护用户。

    如果你想实施一些“密码恢复”程序,你需要像每个人一样,向有临时链接的人发送电子邮件,在发送随机生成的新密码时重置密码。

     类似资料:
    • 我是在阅读了一些关于php中会话管理的主题后开始进行安全讨论的,请查看:https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-termer-persistence#title.2 引自章节:胡椒还是不胡椒? 一个更好的解决方案是,在将散列插入数据库之前对其进行加密,如果使用硬件分离,这种解决方案尤其有用。有了这

    • 简介 Laravel Hash facade 为存储用户密码提供了安全的 Bcrypt 和 Argon2 哈希。如果您使用 Laravel 应用程序中内置的 LoginController 和 RegisterController 类,则默认情况下它们将使用 Bcrypt 进行注册和身份验证。 {tip} Bcrypt 是哈希密码的理想选择,因为它的「加密系数」可以任意调整,这意味着生成哈希所需的

    • 我用哈希法通过了一个密码 这将密码作为哈希值存储到数据库中。但是当我试图通过 无论密码是否正确,它都会告诉我密码是正确的。有没有办法解决这个问题,所以我可以散列密码,但登录时输入(非散列)密码。

    • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

    • 问题内容: 我需要解密密码。密码已使用功能加密。 现在,我们假设它存储在数据库中(有一个“用户”表,其中包含用户名,密码等),我需要登录:我必须查看用户输入的密码是否与存储在其中的加密密码匹配。数据库。 这是SQL代码… …但未加密,因此不等于表用户的密码字段中存储的内容… 所以,有一个使用?后解密的功能。还是应该更改我的加密方法?或者还有什么? 问题答案: Bcrypt是一种单向哈希算法,您无法

    • 多亏了最近一篇文章中的一些好建议,我才从中实现了PBKDF2https://defuse.ca/php-pbkdf2.htm进入一个小的PHP图像库,我正在建设教自己一些PHP。 我知道您将salt和hash存储在数据库中,然后在用户输入密码时重新构建它们以匹配。我不明白的是,当上面网站上的validate_password函数为同一个密码生成不同的、唯一的salt时,它是如何工作的。 例如,我创