Python bcrypt 与 Node.js bcrypt

4 投票
1 回答
2121 浏览
提问于 2025-04-18 16:12

我有一个Python脚本,它把用户数据导入到MongoDB中,并使用bcrypt来加密用户的密码。

这些数据还会在一个Node.js的网页应用中使用,我想知道怎样才能确保Python生成的密码加密结果和Node.js中的结果是一样的!

当我运行Node.js版本时,我得到了这个:

> bcrypt.genSalt(10, function(err, salt) {
... bcrypt.hash("a", salt, function(err, hash) {
..... console.log(hash);
..... });
... });
undefined
> $2a$10$tOT8MN1.3gsb6jWVL2hMRe0PHnJnXCxJX9xBewNl.2iRDnZCV/NeC

而在Python中

>>> import bcrypt
>>> password =b"a"
>>> hashed = bcrypt.hashpw(password, bcrypt.gensalt(10))
>>> hashed
'$2a$10$RzKqQppa3Y7ZZV8f7Ay5COFB5GMEGu7aLH7Fe2HchCyYF1gWVMZ/m'

我用Node.js生成的加密结果在Python中比较时,返回的是:

>>> node_hash = b"$2a$10$tOT8MN1.3gsb6jWVL2hMRe0PHnJnXCxJX9xBewNl.2iRDnZCV/NeC"
>>> if bcrypt.hashpw(password, node_hash) == node_hash:
...     print("It Matches!")
... else:
...     print("Does not match")
... 
It Matches!

有没有办法在Python中创建一个bcrypt加密结果,以便在Node.js应用中使用?

1 个回答

0

是的,和在Node中一样,把哈希值作为第二个参数传进去进行检查。用不同的随机盐值创建的哈希值是不会匹配的。

撰写回答