ruby-on-rails - 如何将 bcrypt 摘要密码转换回原始字符串?
问题描述
我正在开发一个 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
解决方案
从他们的自述文件中:
背景
散列算法获取一大块数据(例如,您的用户密码)并创建一个“数字指纹”或散列。因为这个过程是不可逆的,所以没有办法从哈希返回密码。
换句话说:
hash(p) #=> <unique gibberish>
您可以存储散列并对照由潜在有效密码构成的散列对其进行检查:
<unique gibberish> =? hash(just_entered_password)
我也不明白你为什么要这样做。如果您可以将其还原为密码,那么如何防止窃取您的数据集的黑客做同样的事情?散列密码的全部意义在于无法逆转。您只能检查提供的密码是否正确。
推荐阅读
- git - 当我推送我的 repo 时,如何自动将项目中的 post-receive 文件与 git hook 目录中的 post-receive 文件同步?
- javascript - 角度嵌套表单错误 - 循环对象值
- angular - 如何动态创建角度组件并附加到顶部而不是底部?
- python - 我如何解决 InvalidArgumentError: cycle_length must be > 0 when load tfrecords file
- c# - ASP.NET Telerik 组合框未使用新值更新
- javascript - typescript Success Callback 方法中 Response.Redirect (ASP.NET) 的替代方法是什么?
- swift - SwiftUI - 如何访问列表中的数据
- c# - 将 C 结构转换为 C#?
- python - PyCharm 和 PyQT QFileDialog 之间的奇怪交互
- flutter - 无法确定任务“:google_maps_flutter:compileDebugAidl”的依赖关系