前端登录过程aes加密

项目场景:

在做登录的时候用户名和密码的安全至关重要,所以一般在登录的过程中会对用户名做加密处理


业务处理过程:

在这里采用的是常见的处理模式,aes加解密。简单来说就是:前后端约定好随机的key,前端加密后将随机key和账户名以及密码提交,后端解密出密码,与数据库进行比对,用户登录完成。

  1. 前后端约定好key(例:时间戳,每次提交时间戳都会不断变化,安全性更好。注意:key默认16位,时间戳不足的位数要和后端约定好怎么补足,可以随便加一些字符)
  2. 前后端约定好加解密的方式(注:如果服务部署在linux环境下,java解密时会有报错)
  3. 使用crypto-js进行加解密操作
//说明:
//  1.如果加密解密涉及到前端和后端,则这里的key要保持和后端的key一致
//  2.AES的算法模式有好几种(ECB,CBC,CFB,OFB),所以也要和后端保持一致
//  3.AES的补码方式有两种(PKS5,PKS7),所以也要和后端保持一致
//  4.AES的密钥长度有三种(128,192,256,默认是128),所以也要和后端保持一致
//  5.AES的加密结果编码方式有两种(base64和十六进制),具体怎么选择由自己定,但是加密和解密的编码方式要统一

/*加密*/
/**
 * 
 * @param {*} str 
 * @param {*} aesKey
 * @returns 
 */
export function aesEncode(str, aesKey) {
    if (typeof aesKey !== "string")
        aesKey = aesKey.toString()
    // aesKey不足16位的补足
    if (aesKey.length !== 16) {
        let flag = aesKey.length
        while (flag !== 16) {
            flag < 16 ? aesKey = aesKey + '6' : aesKey = aesKey.slice(0, aesKey.length - 1)
            flag = aesKey.length
        }
    }
    // var key = CryptoJS.enc.Utf8.parse(aesKey);
    // 默认的 KEY 与 iv
    const srcs = CryptoJS.enc.Utf8.parse(str)
    const KEY = CryptoJS.enc.Utf8.parse(aesKey) // ''中与后台一样  密码
    const IV = CryptoJS.enc.Utf8.parse(aesKey) // ''中与后台一样
    var encryptedData = CryptoJS.AES.encrypt(srcs, KEY, {
        iv:IV,
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encryptedData.toString();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霜叶w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值