是否可以使用 js 的 bcrypt 解密由 ruby 的 bcrypt 生成的哈希值?

is it possible to decrypt a hash made with ruby's bcrypt using js's bcrypt?

我有一个包含老客户数据的数据库,因为他们的密码是使用 bcrypt 加密密码保存的,是否可以使用 javascript 中的库使用相同的密钥解密密码?

。因为您无法“解密”哈希。 哈希是一种单向函数

你可以从鸡蛋 --> 煎蛋;你不能从煎蛋 --> 鸡蛋。

当用户提交密码时,您不会解密您存储的哈希值,而是对用户输入执行相同的bcrypt操作并比较哈希值.如果它们相同,则您接受身份验证。


在不同语言的给定输入上使用 bcrypt 哈希算法时,您会得到 相同的哈希值 吗? (Ruby 和 JavaScript,或其他)? 。但这并不意味着您可以使用任何一种语言解密 哈希。

这里犯的错误是您将可逆加密和解密与散列混淆了,虽然从技术上讲这是一种加密形式,但不能(或至少不应该)能够解密。

如果你想使用当前存在的同一组密码,那么是的,你应该能够传输密码,并且当用户尝试登录时它们应该仍然匹配,前提是你使用相同的哈希函数无论您使用何种功能实现。

如果您需要这些纯文本密码,恐怕您就不走运了。

警告

您的原始哈希函数可能使用了盐 and/or 种子。在匹配密码时您需要知道/能够参考,以确保返回预期的哈希值。

他们的密码没有“保存”,而是散列,你不能从散列中检索原始数据,这是散列和加密之间的根本区别。

如果你想了解更多,我推荐this article


JS bcrypt 和 Ruby 是相同的算法,所以您仍然可以使用 JS 代码对您的旧客户数据库检查密码有效性。 但是,您必须记住为了获得相同的哈希值而使用的 轮数

有关维基百科的更多信息 bcrypt page