用户密码绝不能以纯文本存储,而应该使用哈希算法哈希化后存储。bcrypt 是一种安全且广泛使用的哈希算法,可以用于实现安全存储用户密码。
安装:npm install bcryptjs
测试:
const bcrypt = require("bcryptjs");
const hashFunc = async () => {
const password = 'red111';
// 这里的8是bcrypt的作者推荐设置的hash计算次数,
// 使用8能获得安全性和速度之间的最佳平衡。
const hashedPassword = await bcrypt.hash(password, 8);
// 输出:Password in plain text: red111
console.log("Password in plain text: " + password);
// 输出:Hashed password: $2a$08$ASlaj6HyiLK6WZNIyv0wnOdueMQVGYtXT20vd6kM6WYlcYlt67PhS
console.log("Hashed password: " + hashedPassword);
// 用户登录时,使用bcrypt.compare验证密码是否匹配。
const isMatch_r = await bcrypt.compare("red111", hashedPassword);
console.log(isMatch_1); // true
const isMatch_f = await bcrypt.compare("Red111", hashedPassword);
console.log(isMatch_2); // false
};
hashFunc();
加密和哈希是两个不同的概念。
加密是可逆的,即加密后的密文能解密还原成明文。
但哈希化是单向的,如上面的例子:
$2a$08$ASlaj6HyiLK6WZNIyv0wnOdueMQVGYtXT20vd6kM6WYlcYlt67PhS
无法再次通过计算得到 red111