JAVA 登录数据前端加密+后台验证RSA

420 阅读1分钟

前端加密使用RSA+MD5+自写算法
使用到了 md5.js+jsencrypt.min.js+1.js+RSAUtils.java(自写算法)
下载链接:gitee.com/gy297879328…
使用:RSAUtils.java生成一堆对 ( 公钥跟私钥)公钥放到前台 私钥放后台**
中间使用JSON传输

前端

$.ajax({
     type:"POST",
        url:"#(path)/manager/login/submit?returnUrl="+returnUrl,
        data:{
        //u:账号
        //p:密码
        //v 验证码
        //returnurl 跳转的url
            "l":j(u,p,v,returnUrl)//加密参数  j方法在 1.js中
        },
        dataType:"JSON",
        success:function (data) {
            console.log(data);
			 if(data.status=="success"){
                        window.location.href="/";
                    }

        }

1.JS

## 1.js
function j(a,b,c,d) {
    var data = {};
    data["userCode"] = a;
    data["password"] = b;
    data["verifyCode"] = c;
    data["returnUrl"] = d;
    ## s方法我放到了 md5.js中,自写算法也在里面嵌套这
    data["sign"] = s(a+b+c+d);
    var encrypt = new JSEncrypt();
    ## 替换私钥
 encrypt.setPublicKey('MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgZsjUfBvYInbxhYFmp0wyGluPxJySfmXZ6fkOZw0WP6jiNnf8Kj6hdChaj5u+FihTZYSCL39+i+ME2Y2FHTVXVwxz4vBfTS+ePtQ1MY+zfmzSVhIAJ7UFTRj2hSwVG9Ic0+5W/VtYl4Q+EJhawdq9bLnXzjz+UIMRDd3w85bq5/k83oXgUz+BEL5DixyjR3eXXZ7gBqeGUOBZ7qQ3NaeWKDlKKMm6yl3F2uIoUiJ9jMtupvlZMoiWGOSTd/RqZSBjisp088MrzLS0sn2DpMguXTLEJQNyqDa6r233+6nHKGWlO+nLAEPiJ0ib5fEIKiOC6yT0uvgQFXLjlXzuc3VXQIDAQAB');
    return encrypt.encrypt(JSON.stringify(data));
}

后台

//前台提交的加密字符串
String encrypt = getPara("l");
//获取私钥字符串
        String privateKey = PropKit.get("PrivateKey");
        String encryptStr="";
        try {
                //解密  RSAUtils在工具包里面有
                encryptStr = new String(RSAUtils.privateDecrypt(encrypt, privateKey));

        } catch (Exception e) {
                HashMap<String, Object> returnMap = new HashMap<>();
                returnMap.put("status", "false");
                returnMap.put("msg", "encrypt error");
                returnMap.put("returnUrl", "returnUrl");
                renderJson(returnMap);
                return;
        }
        HashMap<String, String> hashMap=JSON.parseObject(encryptStr, HashMap.class);
        String userCode = hashMap.get("userCode");
        String password = hashMap.get("password");
        String verifyCode = hashMap.get("verifyCode");
        String returnUrl= hashMap.get("returnUrl");
        //验证sign
        //EncryptUtil类 自写算法1.js的java版本 
        String sign= hashMap.get("sign");
        String s = Md5Kit.md5(EncryptUtil.pwd(userCode + password + verifyCode + returnUrl) + "sxjlrj");
        if(!sign.equals(s.toLowerCase())){
                //加密错误
                HashMap<String, Object> returnMap = new HashMap<>();
                returnMap.put("status", "false");
                returnMap.put("msg", "encrypt error");
                returnMap.put("returnUrl", "returnUrl");
                renderJson(returnMap);
                return;
        }

混淆

因为里面的js在前台是能看的 所以需要将自写的1.js代码 js混淆一下,建议采用以下 随便哪一种

方法1:WWW.JSJIAMI.COM/混淆的地址

方法2:WWW.JAVASCRIPTOBFUSCATOR.COM/JAVASCRIPT-…

将1.js代码混淆后 再替换放到js中就好了

image.png