【问题标题】:How to know plain text of :encrypted_password, in devise?如何在设计中知道 :encrypted_pa​​ssword 的纯文本?
【发布时间】:2017-01-21 15:30:44
【问题描述】:

如果我使用 has_secure_password,我的白名单是:password、password_confirmation 和 password_digest。其中password是password_digest的明文,经过bcrypt加密。

但是当我将设计与我的用户模型一起使用时,它只有encrypted_password 字段,我不知道如何知道password 的纯文本。该架构没有password field。我通常使用 rails consle 进行调试。所以任何人都可以帮助我如何知道encrypted_password的纯文本。

【问题讨论】:

  • 这就是重点,你不应该知道。为什么你想/需要在你的应用中知道它?
  • bcrypt 实际上不是加密,只是另一个错误命名的例子。它是一种单向加密安全哈希,不可逆,是处理密码的一种正确方式。
  • 它不在我的应用程序中,在开发环境中,有时我忘记了密码,我无法登录到我的应用程序来测试视图。所以我试着得到它的纯文本。但是没有办法。

标签: ruby-on-rails devise passwords


【解决方案1】:

无法从 encrypted_pa​​ssword 字段中获取纯文本密码。 但是,您可以通过设置用户模型的password 属性来更改密码并将其设置为您选择的任何字符串。例如:

user = User.find(34)
user.password = "some password"
user.save!

【讨论】:

  • 投反对票,想解释一下吗?否则,我无法改进这个和未来的答案。
  • 没错。无法获取密码的纯文本。当我尝试user.passowd 时,它总是返回nil。但是使用命令 user.password = 'my password' 更新密码,它可以工作。
【解决方案2】:

使用散列函数存储密码的全部意义在于无法反转散列函数。这就是为什么它被称为单向函数。

唯一的方法是尝试所有可能的密码,直到哈希函数产生与您相同的哈希值。这就是像 hashcat 这样的密码破解者所做的,但他们使用 GPU 来并行化这个过程。如果您选择了一个长而复杂的密码,那么执行此操作的时间将比攻击者完成的时间更长。

使用在 CPU 时间或内存需求方面代价高昂的哈希函数对于保护密码也很重要。请参阅密码密钥派生函数。

【讨论】:

  • 是用MD5还是SHA加密?
猜你喜欢
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多