【发布时间】:2020-06-27 01:23:45
【问题描述】:
我对加密方面的事情或多或少有些冷淡,在这方面花了几天时间,我需要帮助。
计划是向用户发送邮件,让他们登录,根据 SHA1 验证他们的密码,然后在 Bcrypt 中加密提供的密码,替换现有密码。
我有一个“用户”表,其中包含由 PHP 中的 IonAuth 和 FlexiAuth 组合生成的密码,以及每个密码的相应盐值。
根据 IonAuth 的配置文件,密码应该是 SHA1。
我已经通过现有的 Bcrypt 方法运行了一个我知道的 SHA1 加密密码,并且它也为密码和带盐的密码提供了 false,所以我至少消除了 Bcrypt 作为一种可能的算法。
因此,出于测试目的,我使用了已知且有效的用户名和密码。
我已经用Vue、Node、Express等重新编写了应用程序,并尝试过:
let password = passwordHash.verify(providedPassword + user.salt, user.password)
console.log("Users:password", password)
…但是密码和加盐的密码都是错误的。
我正在为 Node 使用古老的 passwordHash 模块,因为我找不到其他任何东西,而且我怀疑这不会起作用,因为它会在其哈希字符串前面加上“sha1”
作为参考,“users”表中的哈希密码字符串以:“$2a$08$...”开头,而 Bcrypt 在 Node 中生成的密码字符串以:“$2a$10$...”开头
有什么想法吗?
【问题讨论】:
-
passwordHash 在内部生成自己的盐——您无需提供自己的盐,API 会为您完成。 user.password 应该是数据库中的密码。请在生产代码中don't log user passwords。
-
嗨@TheGreatContini,如上所述,我不是在尝试恢复密码,而是在检查每个用户输入的密码,如果有效,将它们移动到 Bcrypt。
-
如果你不使用 bcrypt 来检查密码,那么使用它是没有意义的。 Bcrypt 应该检查密码,我不知道你为什么使用
passwordHash,它在六年前就被弃用了。