关于处理用户信息明文传输的几种方法

在一般的前后端分离项目当中,时常会有敏感信息明文传输的情况存在。这里我们采用前端数据请求加密,后台数据接收解密来防止他人截取用户等敏感信息。

1.常用的base64加解密

前端需要首先安装base64,使用npm命令:npm install base-64。随后便可以进行加密操作。

import Base64  from 'base-64';

handleSubmit = () => {
    this.switchLoading(true)
    const { form, history, dispatch } = this.props
    const payload = {
      _this: this,
      history
    }
    form.validateFields((err, values) => {
      if(!err){
        //引入base64后,在这里进行base64加密!!!
        values.username = Base64.encode(values.username)
        values.password = Base64.encode(values.password)
        dispatch(doLogin({...payload, values}))
      }else{
        this.switchLoading(false)
      }
    })
  }

 后台接口使用base64进行解密操作,后续便可以继续正常的业务流程。

//使用JavaUtil的Base64进行解密操作
//Base64 解密
        byte[] undecoded = Base64.getDecoder().decode(sysUser.getUsername());
        byte[] pwdecoded = Base64.getDecoder().decode(sysUser.getPassword());
        String unameStr = new String(undecoded);
        String pwdStr = new String(pwdecoded);
        sysUser.setUsername(unameStr);
        sysUser.setPassword(pwdStr);

2.AES加解密

此处需要引入crypto-js做前端数据的加密,同时密钥和偏移量要保持与后端一致。

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>

function yhmmadl() {
            $("#loginbtn").hide();
            $("#loginbtnhide").show();
            $("#loginbtnhide").attr("disabled","true");
            //对用户登录信息做加密处理
            //密钥 (前后端一致)十六位
            let key = "abcdefghijkl_key";
            //偏移量 (前后端一致)十六位
            let iv = "abcdefghijklm_iv";
            //获取加密后的密码
            let us = aesMinEncrypt(key,iv,$("#input_username").val());
            let pa = aesMinEncrypt(key,iv,$("#input_password").val()+ "-" + "<%=clientIP%>");
            $("#username").val(us);
            $("#password").val(pa);
        }

后台使用 进行AES解密。

//密钥 (前后端一致)十六位
    private static final String KEY = "abcdefghijkl_key";

    //偏移量 (前后端一致)十六位
    private static final String IV = "abcdefghijklm_iv";
//解密

public static String aesDecrypt(String encryptStr) {
        String result;
        try {
            result =  StringUtils.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr));
        } catch (Exception e) {
            result = "decrypt exception";
            e.printStackTrace();
        }
        return result;

    }

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值