当前位置:首页 > JavaScript

js 实现 salt

2026-04-05 17:02:13JavaScript

JavaScript 实现 Salt

在密码学中,Salt 是一串随机数据,用于增强哈希函数的安全性。通常与密码一起使用,防止彩虹表攻击。

生成随机 Salt

使用 crypto 模块生成随机 Salt:

js 实现 salt

const crypto = require('crypto');

function generateSalt(length = 16) {
  return crypto.randomBytes(length).toString('hex');
}

const salt = generateSalt();
console.log(salt); // 输出类似 '3a7f1b9c2e5d8f0a'

结合密码和 Salt 进行哈希

将 Salt 与密码结合后使用哈希算法:

js 实现 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,安全性不足

标签: jssalt
分享给朋友:

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…