前端用PBKDF2导出密钥时,salt到底该怎么处理?
我在用 Web Crypto API 做用户密码的密钥派生,用的是 PBKDF2 算法。但文档里说要加 salt,我不确定这个 salt 是不是每次登录都要重新生成?如果存到 localStorage 会不会有安全风险?
试过固定 salt,但感觉不安全;每次随机生成又不知道怎么和后端对齐。而且我看到有些示例把 salt 和加密数据一起存,这合理吗?
顺便,我页面上有个输入框样式用了下面这段 CSS,应该不影响加密逻辑吧?
.secure-input {
border: 1px solid #ccc;
padding: 8px 12px;
font-family: monospace;
background-color: #f9f9f9;
}
试试这个方法:在用户注册或修改密码时生成一个新的随机salt,用以下方式生成:
把生成的salt和加密结果一起存数据库,这样每次登录验证密码时就可以从数据库读取对应的salt来解密了。
至于存在localStorage的问题,确实不安全。任何敏感信息都不该存这里,容易被恶意脚本获取。
顺便说下你那个CSS样式,对加密逻辑没影响,放心用吧。不过要注意别在输入框里显示明文密码太久,最好加个清除功能或者模糊显示。
总结一下,salt要随机生成并保存,别固定也不要放localStorage,就这么简单处理就好,折腾这些加密逻辑挺累人的。