gpt4 book ai didi

php - PHP 哈希函数(包括盐和原始输出)的 Node.js 等价物是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 00:26:00 25 4
gpt4 key购买 nike

我的同事有一个存储帐户信息的数据库;帐户的 SHA256 哈希密码和盐值作为原始二进制数据 (blob) 存储在列中。

密码在 PHP 中使用此进行哈希处理(true 表示原始输出):

hash("sha256", $salt . $password, true);

我正在尝试在 Node.js 服务器上实现身份验证,该服务器必须从 PHP 取回存储在数据库中的相同散列密码,这似乎不起作用:

/**
* Validates a password sent by an end user by comparing it to the
* hashed password stored in the database. Uses the Node.js crypto library.
*
* @param password The password sent by the end user.
* @param dbPassword The hashed password stored in the database.
* @param dbSalt The encryption salt stored in the database.
*/
function validatePassword(password, dbPassword, dbSalt) {
// Should the dbSalt be a Buffer, hex, base64, or what?
var hmac = crypto.createHmac("SHA256", dbSalt);
var hashed = hmac.update(password).digest('base64');
console.log("Hashed user password: " + hashed);
console.log("Database password: " + dbPassword.toString('base64'));
return hashed === dbPassword;
}

最佳答案

经过大量实验,我找到了解决方案。

/**
* Encrypts a password using sha256 and a salt value.
*
* @param password The password to hash.
* @param salt The salt value to hash with.
*/
function SHA256Encrypt(password, salt) {
var saltedpassword = salt + password;
var sha256 = crypto.createHash('sha256');
sha256.update(saltedpassword);
return sha256.digest('base64');
}

/**
* Validates a password sent by an end user by comparing it to the
* hashed password stored in the database.
*
* @param password The password sent by the end user.
* @param dbPassword The hashed password stored in the database, encoded in Base64.
* @param dbSalt The encryption salt stored in the database. This should be a raw blob.
*/
function validatePassword(password, dbPassword, dbSalt) {
var hashed = SHA256Encrypt(password, dbSalt.toString('binary'));
return hashed === dbPassword;
}

不过,感谢 TravisO,他让我走上了正确的道路。

关于php - PHP 哈希函数(包括盐和原始输出)的 Node.js 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com