【前端js用rsa非对称加密实现】以及rsa加密结果是falseJSEncrypt加密json对象发现超长返回false

哈喽 大家好啊,最近对请求body里面的参数进行rsa非对称加密

最后发现请求参数加密后过长,最后返回的result 为false

rsa非对称加密代码如图所示:

【前端js用rsa非对称加密实现】以及rsa加密结果是falseJSEncrypt加密json对象发现超长返回false_第1张图片

 浏览器控制台报错

Message too long for RSA

【前端js用rsa非对称加密实现】以及rsa加密结果是falseJSEncrypt加密json对象发现超长返回false_第2张图片

 然后查看了其他博主文章:

发现当过长的时候还有一个专门针对json加密后过长的

实现语法:

 【前端js用rsa非对称加密实现】以及rsa加密结果是falseJSEncrypt加密json对象发现超长返回false_第3张图片

body参数里面的结果:

【前端js用rsa非对称加密实现】以及rsa加密结果是falseJSEncrypt加密json对象发现超长返回false_第4张图片

看原理应该是分段了

结果就成功传给后端了

参考原文: 

VUE项目使用RSA加解密(小白版)_vue encryptlong_江小白写bug的博客-CSDN博客

咚咚咚 后续来了 发现加密后,和后端对接不上:

参考原博主写的:

使用RSA非对称加密完成JavaScript前端分段加密和java后端分段解密_rsa odd number of characters_MrSpirit的博客-CSDN博客

将jsencrypt.js修改放到我本地文件

 原来的原生代码:

【前端js用rsa非对称加密实现】以及rsa加密结果是falseJSEncrypt加密json对象发现超长返回false_第5张图片

修改后的代码: 

  JSEncrypt.prototype.encryptLong = function(string) {
        var k = this.getKey();
        try {
            var lt = "";
            var ct = "";
            //RSA每次加密117bytes,需要辅助方法判断字符串截取位置
            //1.获取字符串截取点
            var bytes = new Array(); 
            bytes.push(0);
            var byteNo = 0;
            var len,c;  
            len = string.length;
            var temp = 0;
            for(var i = 0; i < len; i++){
                c = string.charCodeAt(i);  
                if(c >= 0x010000 && c <= 0x10FFFF){  
                    byteNo += 4; 
                }else if(c >= 0x000800 && c <= 0x00FFFF){  
                    byteNo += 3; 
                }else if(c >= 0x000080 && c <= 0x0007FF){  
                    byteNo += 2; 
                }else{  
                    byteNo += 1; 
                }
                if((byteNo % 117) >= 114 || (byteNo % 117) == 0){
                    if(byteNo-temp >= 114){
                        bytes.push(i);
                        temp = byteNo;
                    }
                }
            }  
            //2.截取字符串并分段加密
            if(bytes.length > 1){
                for(var i=0;i< bytes.length-1; i++){
                    var str;
                    if(i == 0){
                        str = string.substring(0,bytes[i+1]+1);
                    }else{
                        str = string.substring(bytes[i]+1,bytes[i+1]+1);
                    }
                    var t1 = k.encrypt(str);
                    ct += t1;
                };
                if(bytes[bytes.length-1] != string.length-1){
                    var lastStr = string.substring(bytes[bytes.length-1]+1);
                    ct += k.encrypt(lastStr);
                }
                return hex2b64(ct);
            }
            var t = k.encrypt(string);
            var y = hex2b64(t);
            return y;
        } catch (ex) {
            return false;
        }
    };

原文博主:

使用RSA非对称加密完成JavaScript前端分段加密和java后端分段解密_rsa odd number of characters_MrSpirit的博客-CSDN博客

你可能感兴趣的:(json)