JSEncrypt.prototype.encrypt = function (str) {
// Return the encrypted string.
try {
return hex2b64(this.getKey().encrypt(str));
}
catch (ex) {
return false;
}
};
//在这增加以下代码
JSEncrypt.prototype.encryptLong = function(string) {
var k = this.getKey();
try {
var ct = "";
// RSA每次加密117bytes,需要辅助方法判断字符串截取位置
// 1. 获取字符串截取点
var bytes = [];
var byteNo = 0;
var len = string.length;
var temp = 0;
for (var i = 0; i < len; i++) {
var 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 - temp >= 117) { // 每当达到117字节时,进行分段
bytes.push(i);
temp = byteNo;
}
}
// 2. 截取字符串并分段加密
if (bytes.length > 0) {
var start = 0;
bytes.forEach(function(byteIndex) {
var str = string.substring(start, byteIndex);
var t1 = k.encrypt(str);
ct += t1;
start = byteIndex;
});
// 加密剩余部分
if (start < len) {
var lastStr = string.substring(start);
ct += k.encrypt(lastStr);
}
return hex2b64(ct);
}
// 如果字符串长度不足117字节,直接加密并返回结果
var t = k.encrypt(string);
return hex2b64(t);
} catch (ex) {
return false;
}
};
调用方法
如果不想用依赖就把源码下载完修改后自行引入即可jsencrypt: 前端rsa加密解密js库 - Gitee.com
参考文章:
使用RSA非对称加密完成JavaScript前端分段加密和java后端分段解密_js-rsa前端分段加密 后端分段解密-CSDN博客