前端请求怎么加密才安全?
我在做登录功能,想把用户密码加密后再发给后端,但不知道该在前端怎么处理。试过用 crypto-js 的 AES 加密,但每次加密结果都不一样,后端解不出来。
这是我的 Vue 代码,是不是哪里写错了?
<script setup>
import CryptoJS from 'crypto-js'
const login = () => {
const password = '123456'
const key = CryptoJS.enc.Utf8.parse('my-secret-key-123')
const encrypted = CryptoJS.AES.encrypt(password, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString()
console.log(encrypted) // 每次刷新页面结果都不同!
}
</script>
不过既然你问了,先解决代码问题。改用CBC模式并固定iv就能解决:
但说真的,前端加密密码这事儿没太大必要。正确做法应该是:
1. 用HTTPS保证传输安全
2. 后端对密码做加盐哈希存储
3. 真要前端加密的话用非对称加密(比如RSA),把公钥放前端
你这方案就算能用,密钥在前端也是裸奔,有心人看下源码就能拿到密钥,安全性其实没提升。
不过说真的,前端加密卵用不大,该用https的地方别省。