我有一个数据库,里面有来自老客户的数据,因为他们的密码是使用bcrypt来加密密码的,那么是否可以使用相同的密钥使用javascript库来解密密码呢?
roqulrg31#
这里所犯的错误是,您将可逆加密和解密与散列混淆了,而散列虽然在技术上是一种加密形式,但不能(或至少不应该)被解密。如果您希望使用与当前相同的密码集,那么是的,您应该能够只通过accross传输密码,并且当用户尝试登录时,密码应仍然匹配,前提是您使用的是相同的哈希函数,而不管您使用的函数是什么实现。如果你需要这些明文密码,恐怕你的运气不好。警告可能是原始哈希函数使用了salt和/或seed。在匹配密码时,您需要知道/能够引用这些信息,以确保返回预期的哈希值。
vc6uscn92#
不,因为你不能“解密”散列。哈希是一个单向函数。你可以吃鸡蛋-->煎蛋卷;你不能从煎蛋卷到鸡蛋。当用户提交密码时,您不会解密存储的哈希,而是执行相同的操作 bcrypt 对用户输入进行操作,并比较哈希值。如果它们相同,则接受身份验证。当使用 bcrypt 给定输入上的哈希算法,使用不同的语言(ruby和javascript,或者别的什么)?对但这并不意味着你可以用任何一种语言解密散列。
bcrypt
kadbb4593#
他们的密码不是“保存”的,而是散列的,你不能从散列中检索原始数据,这是散列和加密的根本区别。如果你想了解更多,我推荐这篇文章js bcrypt ruby one和ruby one是相同的算法,因此您仍然可以使用js代码对照您的老客户db检查密码的有效性。但是,为了获得相同的散列,您必须记住使用的轮数。更多信息请访问维基百科bcrypt页面。
3条答案
按热度按时间roqulrg31#
这里所犯的错误是,您将可逆加密和解密与散列混淆了,而散列虽然在技术上是一种加密形式,但不能(或至少不应该)被解密。
如果您希望使用与当前相同的密码集,那么是的,您应该能够只通过accross传输密码,并且当用户尝试登录时,密码应仍然匹配,前提是您使用的是相同的哈希函数,而不管您使用的函数是什么实现。
如果你需要这些明文密码,恐怕你的运气不好。
警告
可能是原始哈希函数使用了salt和/或seed。在匹配密码时,您需要知道/能够引用这些信息,以确保返回预期的哈希值。
vc6uscn92#
不,因为你不能“解密”散列。哈希是一个单向函数。
你可以吃鸡蛋-->煎蛋卷;你不能从煎蛋卷到鸡蛋。
当用户提交密码时,您不会解密存储的哈希,而是执行相同的操作
bcrypt
对用户输入进行操作,并比较哈希值。如果它们相同,则接受身份验证。当使用
bcrypt
给定输入上的哈希算法,使用不同的语言(ruby和javascript,或者别的什么)?对但这并不意味着你可以用任何一种语言解密散列。kadbb4593#
他们的密码不是“保存”的,而是散列的,你不能从散列中检索原始数据,这是散列和加密的根本区别。
如果你想了解更多,我推荐这篇文章
js
bcrypt
ruby one和ruby one是相同的算法,因此您仍然可以使用js代码对照您的老客户db检查密码的有效性。但是,为了获得相同的散列,您必须记住使用的轮数。更多信息请访问维基百科bcrypt页面。