【问题标题】:How can I convert back to original string a bcrypt digest password?如何将 bcrypt 摘要密码转换回原始字符串?
【发布时间】:2020-08-15 19:47:56
【问题描述】:

我正在开发一个 ruby​​ 应用程序,我有一个使用 gem-bcrypt 存储加密密码的后端用户表。我如何才能真正将我的密码转换回原始密码以在我的视图中显示它? 这是消化我的密码的代码

def self.digest(string)        
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost        
BCrypt::Password.create(string, cost: cost)    
end

【问题讨论】:

  • 你不能。这就是使用Bcrypt 的全部意义所在。它不支持加密和解密字符串。 Bcrypt 是一个散列函数,从它的散列中,你不能再计算原始字符串了。
  • 这是一个典型的 XY 问题——你询问了你解决问题的尝试,但没有指定问题是什么(编写“记住我”函数)。您可能需要相应地编辑您的问题。如果人们了解您真正想要实现的目标,您将获得更有用的答案。

标签: ruby-on-rails ruby encryption hash bcrypt


【解决方案1】:

来自他们的readme

背景

哈希算法获取大量数据(例如,您的用户密码)并创建一个“数字指纹”或哈希值。因为这个过程是不可逆的,所以没有办法从哈希返回密码。

换句话说:

hash(p) #=> <unique gibberish>

您可以存储哈希值,并根据可能有效密码的哈希值进行检查:

<unique gibberish> =? hash(just_entered_password)

我也不明白你为什么要这样做。如果您可以将其还原为密码,那么如何防止窃取您的数据集的黑客做同样的事情?散列密码的全部意义在于无法逆转。您只能检查提供的密码是否正确。

【讨论】:

  • 我想让记住我的登录功能允许用户不再需要重新输入用户名和密码。我的想法是如果用户点击记住我,则从数据库中获取用户密码和用户名到 html 中输入属性的值。我还能做些什么呢?
  • 这是通过客户端中的 cookie 完成的。它存储会话或具有到期日期的身份验证令牌。如果您使用“设计”,您可以简单地使用他们的Rememberable 模块。如果您想了解幕后花絮,我建议您查看this question
  • 要更好地了解如何在 Ruby on Rails 中自己执行此操作,您可以查看 this RailsCast episode。它有点老了,我不确定这是否仍然是要走的路。然而,它显示了如何实现这样的功能。另一个关于一般概述的好问题是What is the best way to implement “remember me” for a website?
猜你喜欢
  • 2013-04-10
  • 2017-06-15
  • 2021-05-21
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多