前端加密时密钥到底该怎么安全存储?

司徒倩云 阅读 63

我在做用户敏感数据的前端加密,用的是 AES,但密钥放哪儿都感觉不安全。放 localStorage 会被 XSS 拿走,写死在代码里又容易被反编译看到,这不就白加密了?

试过用环境变量 process.env.VUE_APP_SECRET_KEY,结果打包后还是明文出现在 JS 文件里。有没有真正靠谱的做法?或者是不是我理解错了前端加密的使用场景?

我来解答 赞 10 收藏
二维码
手机扫码查看
1 条解答
炜曦酱~
前端加密确实存在密钥存储的困境,这是由前端运行环境特性决定的。推荐的做法是不要在前端存储任何真正的加密密钥。

通常我们会采用服务端加密的方式,前端只负责传输数据。如果必须在前端加密,可以考虑使用混合加密方案:先用对称加密(如AES)加密数据,再用非对称加密(如RSA)加密这个AES密钥,最后把加密后的密钥和数据一起发给后端。

具体来说,后端生成一对RSA公私钥,前端拿到公钥后,用它来加密随机生成的AES密钥。代码示例:

function encryptData(publicKey, data) {
const aesKey = window.crypto.getRandomValues(new Uint8Array(16));
// 用AES加密data
// 再用RSA公钥加密aesKey
}


记住一点,永远不要尝试在前端保存敏感密钥。这不只是安全问题,更涉及到系统设计思路。前端加密更多是为了防止数据在网络传输过程中被窃取,而不是保护数据本身。

说到XSS防护,建议优先关注输入输出过滤这些基础工作,而不是纠结密钥存放位置。毕竟再好的加密也挡不住XSS攻击者的为所欲为。
点赞
2026-03-25 21:04