我可以使用 bcrypt 来比较已经散列的密码吗?

编程入门 行业动态 更新时间:2024-10-09 08:25:54

我<a href=https://www.elefans.com/category/jswz/34/1771306.html style=可以使用 bcrypt 来比较已经散列的密码吗?"/>

我可以使用 bcrypt 来比较已经散列的密码吗?

我是 nodejs 的新手,正在努力解决有关密码哈希的问题。我正在使用 ReactJS 重新创建一个网站并使用 nodejs 作为后端。数据库中有一个名为 userprofiles 的表。它有电子邮件、散列密码、名字、姓氏等。我正在尝试创建登录页面作为开始,我只需要一个登录页面而不是注册页面,因为我已经有了以前数据库中的用户表。我使用 bcrypt 来比较散列密码,但那些密码没有被 bcrypt 散列,因为以前的网站是使用 php 创建的,因为它使用不同的方法来散列密码。我的问题是我可以在登录时使用 bcryptpare 来比较我的密码吗?

我还能使用 bcrypt 吗?请就此事告诉我,谢谢。

回答如下:

如果this是您正在使用的

bcryptpare()
,那么
bcryptpare()
不会比较两个散列密码。

它将纯文本密码与散列密码进行比较。它使用散列密码中的存储参数(例如盐),以便使用相同的盐对纯文本密码进行散列,然后可以比较两个散列。

由于散列密码通常只会在您的服务器上创建,因此通常可以调整您的代码以适应这一点。用户不知道使用的盐,因此他们将提交一个纯文本密码(通常在传输中受 https 保护)。

如果您无法避免比较两个 bcrypt 散列密码,一种可能性是使用 crypto.timingSafeEqual() 之类的东西直接比较两个散列。 bcrypt 由算法标识符、迭代级别、salt 和哈希组成。两个相同的原始密码应该产生相同的 bcrypt 散列值(相同的算法、相同的盐、相同的迭代级别、相同的散列以及因此相同的二进制值)。但是,我自己还没有尝试过。

这是 bcrypt 哈希值的样子:

Resultant hashes will be 60 characters long and they will include
the salt among other parameters, as follows:

$[algorithm]$[cost]$[salt][hash]

2 chars hash algorithm identifier prefix. "$2a$" or "$2b$" indicates BCrypt
Cost-factor (n). Represents the exponent used to determine how many iterations 2^n
16-byte (128-bit) salt, base64 encoded to 22 characters
24-byte (192-bit) hash, base64 encoded to 31 characters

$2b$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |                     |
 |  |  |                     hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |
 |  |  salt = nOUIs5kJ7naTuTFkBy1veu
 |  |
 |  cost-factor => 10 = 2^10 rounds
 |
 hash-algorithm identifier => 2b = BCrypt

更多推荐

我可以使用 bcrypt 来比较已经散列的密码吗?

本文发布于:2024-05-13 16:20:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760052.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:可以使用   密码   bcrypt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!