PBKDF2在前端实现时,如何避免直接暴露salt值?

程序员蓝月 阅读 16

最近在做用户注册功能时,想用PBKDF2加密密码。我用crypto-js库写了这样的代码:


<form onsubmit="hashPassword()">
  <input type="password" id="password">
  <button>注册</button>
</form>

<script>
function hashPassword() {
  const salt = '固定盐值123'; // 这里直接写死了salt
  const hash = CryptoJS.PBKDF2(
    document.getElementById('password').value,
    salt,
    {keySize: 512/32, iterations: 1000}
  ).toString();
  // 发送到服务器...
}
</script>

但这样salt值不是直接暴露在客户端了吗?我试过从后端获取salt再加密,但这样前端无法预先计算哈希。有没有更好的做法?总不能每次都要让后端处理PBKDF2吧?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
 ___卓尚
salt必须由服务器生成和管理,前端只负责传原始密码。每次注册登录都让后端处理PBKDF2,这是安全的基本要求。

// 前端代码
function hashPassword() {
const password = document.getElementById('password').value;
fetch('/api/register', {
method: 'POST',
body: JSON.stringify({password}),
headers: {'Content-Type': 'application/json'}
}).then(res => res.json()).then(data => {
console.log('注册成功');
});
}


后端用crypto模块实现PBKDF2,随机生成salt并存储。搞定。
点赞
2026-02-18 17:10