jsrsa解密中文乱码,js中文rsa,中文加密偶尔解密不出来

jsrsa解密中⽂乱码,js中⽂rsa,中⽂加密偶尔解密不出来直接改动jsencrypt.js⽂件,在⽂件最下⽅的 JSEncrypt.version = "3.1.4"; 前⾯,添加下⾯的代码://任意长度RSA Key分段加密解密长字符串
//获取RSA key 长度
keylength = function () {
return ((bitLength()+7)>>3);
};
// 分段解密,⽀持中⽂
JSEncrypt.prototype.decryptUnicodeLong = function (string) {
var k = Key();
//解密长度=key size.hex2b64结果是每字节每两字符,所以直接*2
var maxLength = ((k.n.bitLength()+7)>>3)*2;
try {
var hexString = b64tohex(string);
var decryptedString = "";
var rexStr=".{1," + maxLength + "}";
var rex =new RegExp(rexStr, 'g');
var subStrArray = hexString.match(rex);
if(subStrArray){
subStrArray.forEach(function (entry) {
decryptedString += k.decrypt(entry);
});
return decryptedString;
}
} catch (ex) {
return false;
}
};
// 分段加密,⽀持中⽂
ptUnicodeLong = function (string) {
var k = Key();
//根据key所能编码的最⼤长度来定分段长度。key size - 11:11字节随机padding使每次加密结果都不同。
var maxLength = ((k.n.bitLength()+7)>>3)-11;
try {
var subStr="", encryptedString = "";
var subStart = 0, subEnd=0;
var bitLen=0, tmpPoint=0;
for(var i = 0, len = string.length; i < len; i++){
//js 是使⽤ Unicode 编码的,每个字符所占⽤的字节数不同
var charCode = string.charCodeAt(i);
if(charCode <= 0x007f) {
bitLen += 1;
}else if(charCode <= 0x07ff){
bitLen += 2;
}else if(charCode <= 0xffff){
bitLen += 3;
}else{
bitLen += 4;
}
//字节数到达上限,获取⼦字符串加密并追加到总字符串后。更新下⼀个字符串起始位置及字节计算。if(bitLen>maxLength){
subStr=string.substring(subStart,subEnd)
encryptedString += k.encrypt(subStr);
subStart=subEnd;
bitLen=bitLen-tmpPoint;
}else{
subEnd=i;
tmpPoint=bitLen;
}
}
subStr=string.substring(subStart,len)
encryptedString += k.encrypt(subStr);
return hex2b64(encryptedString);
} catch (ex) {
return false;
}
};
//添加的函数与⽅法结束

本文发布于:2024-09-20 15:39:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/93070.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:虚拟键值表
下一篇:Vehicle key
标签:字符串   长度   加密   分段
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议