js 实现 salt
JavaScript 实现 Salt
在密码学中,Salt 是一串随机数据,用于增强哈希函数的安全性。通常与密码一起使用,防止彩虹表攻击。
生成随机 Salt
使用 crypto 模块生成随机 Salt:

const crypto = require('crypto');
function generateSalt(length = 16) {
return crypto.randomBytes(length).toString('hex');
}
const salt = generateSalt();
console.log(salt); // 输出类似 '3a7f1b9c2e5d8f0a'
结合密码和 Salt 进行哈希
将 Salt 与密码结合后使用哈希算法:

function hashPassword(password, salt) {
return crypto.pbkdf2Sync(password, salt, 10000, 64, 'sha512').toString('hex');
}
const password = 'userPassword123';
const hashedPassword = hashPassword(password, salt);
console.log(hashedPassword); // 输出哈希后的密码
验证密码
验证时需要原始 Salt 和哈希后的密码:
function verifyPassword(inputPassword, storedHash, storedSalt) {
const inputHash = hashPassword(inputPassword, storedSalt);
return inputHash === storedHash;
}
const isMatch = verifyPassword('userPassword123', hashedPassword, salt);
console.log(isMatch); // true 或 false
浏览器环境实现
在浏览器中可以使用 Web Crypto API:
async function generateBrowserSalt(length = 16) {
const array = new Uint8Array(length);
window.crypto.getRandomValues(array);
return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
}
generateBrowserSalt().then(salt => {
console.log(salt);
});
注意事项
Salt 长度建议至少 16 字节 每个用户应有唯一的 Salt Salt 需要与哈希值一起存储 避免使用 Math.random() 生成 Salt,安全性不足






