PBKDF2在前端实现时,如何避免直接暴露salt值?
最近在做用户注册功能时,想用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吧?
后端用crypto模块实现PBKDF2,随机生成salt并存储。搞定。