`bcryptjs` 是一个用于在 Node.js 中进行密码哈希处理的库,它是 `bcrypt` 的纯 JavaScript 实现,无需编译,使用起来更加方便。
npm install bcryptjs
`genSalt()`:方法用于生成一个盐,盐的复杂度越高,哈希处理所需的时间越长,安全性也相对更高。
`hash()`:方法使用生成的盐对密码进行哈希处理,得到加密后的密码。
`compare()`:方法用于比较原始密码和哈希后的密码是否匹配。
const bcrypt = require("bcryptjs");
// 要加密的原始密码
const password = "mySecretPassword";
// 生成盐,盐的复杂度为 10
bcrypt.genSalt(10, (err, salt) => {
if (err) throw err;
// 使用盐对密码进行哈希处理
bcrypt.hash(password, salt, (err, hash) => {
if (err) throw err;
console.log("Hashed password:", hash);
// 比较原始密码和哈希后的密码
bcrypt.compare(password, hash, (err, isMatch) => {
if (err) throw err;
console.log("Password match:", isMatch);
});
});
});
`rounds`:一个整数,表示生成盐的复杂度,默认值为 10。复杂度越高,生成盐和哈希处理的时间就越长。
`callback`:一个回调函数,接收两个参数:`err`(错误信息)和 `salt`(生成的盐)。
bcrypt.genSalt(12, (err, salt) => {
if (err) {
console.error("Error generating salt:", err);
} else {
console.log("Generated salt:", salt);
}
});
`password`:要进行哈希处理的原始密码。
`salt`:生成的盐。
`callback`:一个回调函数,接收两个参数:`err`(错误信息)和 `hash`(哈希后的密码)。
const password = "examplePassword";
bcrypt.genSalt(10, (err, salt) => {
if (err) throw err;
bcrypt.hash(password, salt, (err, hash) => {
if (err) throw err;
console.log("Hashed password:", hash);
});
});
`password`:要比较的原始密码。
`hash`:哈希后的密码。
`callback`:一个回调函数,接收两个参数:`err`(错误信息)和 `isMatch`(布尔值,表示密码是否匹配)。
const password = "examplePassword";
bcrypt.genSalt(10, (err, salt) => {
if (err) throw err;
bcrypt.hash(password, salt, (err, hash) => {
if (err) throw err;
bcrypt.compare(password, hash, (err, isMatch) => {
if (err) throw err;
console.log("Password match:", isMatch);
});
});
});
在 Web 应用中,用户注册时,使用 `bcryptjs` 对用户密码进行哈希处理后再存储到数据库中,避免密码以明文形式存储,提高系统的安全性。当用户登录时,使用 `compare()` 方法比较用户输入的密码和数据库中存储的哈希密码是否匹配。
在一些需要对敏感数据进行加密和验证的场景中,也可以使用 `bcryptjs` 进行处理。
盐的复杂度越高,哈希处理的时间就越长。在选择盐的复杂度时,需要权衡安全性和性能。一般来说,复杂度为 10-12 是一个比较合适的范围。
`bcryptjs` 的方法通常是异步的,需要使用回调函数来处理结果。在使用时要注意处理异步操作,避免出现回调地狱的问题。也可以使用 `Promise` 或 `async/await` 来优化代码结构。
const bcrypt = require("bcryptjs");
async function hashPassword() {
try {
const password = "myPassword";
const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash(password, salt);
const isMatch = await bcrypt.compare(password, hash);
console.log("Password match:", isMatch);
} catch (error) {
console.error("Error:", error);
}
}
hashPassword();