page contents

对接h5,javascript RSA分段加密java解密异常

Pack 发布于 2020-03-03 18:01
阅读 1445
收藏 0
分类:Java开发

javascript 通过 jsrsasign-all-min.js rsa加密,待加密字符串短一点没事,超长字符串加密完java来解密就有问题,看了jsrsasign-all-min.js 里面源码,也是分段加密。


java拿到待加密字符串加密-解密是OK的。


请问各位gper童鞋在跟h5对接过程遇到过类似问题没有?


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;

}

}, JSEncrypt.prototype.decryptLong = function(string) {

var k = this.getKey();

// var maxLength = ((k.n.bitLength()+7)>>3);

var MAX_DECRYPT_BLOCK = 128;

try {

var ct = "";

var t1;

var bufTmp;

var hexTmp;

var str = b64tohex(string);

var buf = hexToBytes(str);

var inputLen = buf.length;

//开始长度

var offSet = 0;

//结束长度

var endOffSet = MAX_DECRYPT_BLOCK;


//分段加密

while(inputLen - offSet > 0) {

if(inputLen - offSet > MAX_DECRYPT_BLOCK) {

bufTmp = buf.slice(offSet, endOffSet);

hexTmp = bytesToHex(bufTmp);

t1 = k.decrypt(hexTmp);

ct += t1;


} else {

bufTmp = buf.slice(offSet, inputLen);

hexTmp = bytesToHex(bufTmp);

t1 = k.decrypt(hexTmp);

ct += t1;


}

offSet += MAX_DECRYPT_BLOCK;

endOffSet += MAX_DECRYPT_BLOCK;

}

return ct;

} catch(ex) {

return false;

}

};

javascript的加解密一套是不行。

513
Pack
Pack

待加密字符串短一点没事,超长字符串加密完java来解密就有问题:如果是这个问题可能数据在传输时数据丢失,不完整。因为http传输数据是有限的。可能被截掉。你用的什么方式传输?,传输的是什么格式数据?我们之前是采用base4进行流传输然后在转换,或者先压缩好在传输。

请先 登录 后评论