js 实现 salt
生成 Salt 的方法
在 JavaScript 中生成 salt(盐值)通常用于密码加密或哈希过程中,以增强安全性。以下是几种常见的实现方式:
使用 crypto 模块生成随机 salt
Node.js 的 crypto 模块提供了生成随机字节的方法,适合用于生成 salt。
const crypto = require('crypto');
const salt = crypto.randomBytes(16).toString('hex');
使用 window.crypto 在浏览器环境中生成 salt
浏览器端可以通过 window.crypto.getRandomValues 生成随机 salt。
const array = new Uint8Array(16);
window.crypto.getRandomValues(array);
const salt = Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
生成固定长度的字符串作为 salt 如果需要简单的字符串 salt,可以通过拼接随机字符实现。
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let salt = '';
for (let i = 0; i < 16; i++) {
salt += chars.charAt(Math.floor(Math.random() * chars.length));
}
Salt 的使用场景
Salt 主要用于密码存储或数据传输时与原始数据结合,防止彩虹表攻击。例如,在 bcrypt 哈希中:

const bcrypt = require('bcrypt');
const saltRounds = 10;
const plainPassword = 'user123';
bcrypt.genSalt(saltRounds, function(err, salt) {
bcrypt.hash(plainPassword, salt, function(err, hash) {
// 存储 hash 和 salt
});
});
注意事项
- Salt 应为每个用户唯一,避免重复使用。
- Salt 长度建议至少 16 字节(128 位)。
- 避免使用时间戳或简单序列作为 salt,确保其不可预测性。






