您的位置:首页 > Web前端 > JavaScript

JavaScript RSA 超长字符加解密

2017-06-15 14:59 4115 查看
刚刚接触到RSA当时不了解,RSA加解密是有字符串长度限制的,加密最大字符长度是117位,解密最大长度是128位。

用到的JS库JSEncrypt,刚开始找了好几个,发现就这个好用一些,换回来了(途中遇到很多坑,一步一个坑过来的)。

这个库的缺陷:没法用公钥解密只能加密,私钥没法加密只能解密(可能是我没找到方法吧)

附链接:http://travistidwell.com/jsencrypt/

分段加密方法:

// The right encryption code
JSEncrypt.prototype.encryptLong = function(string) {
var k = this.getKey();
var maxLength = (((k.n.bitLength()+7)>>3)-11);
// var maxLength = 117;

try {
var lt = "";
var ct = "";

if (string.length > maxLength) {
lt = string.match(/.{1,117}/g);
lt.forEach(function(entry) {
var t1 = k.encrypt(entry);
ct += t1 ;
});
return hex2b64(ct);
}
var t = k.encrypt(string);
var y = hex2b64(t);
return y;
} catch (ex) {
return false;
}
};

分段解密方法:

// The error decryption code
JSEncrypt.prototype.decryptLong = function(string) {
var k = this.getKey();
var maxLength = ((k.n.bitLength()+7)>>3);
// var maxLength = 128;
try {
var string = b64tohex(string);
var ct = "";
if (string.length > maxLength) {
var lt = string.match(/.{1,128}/g);
lt.forEach(function(entry) {
var t1 = k.decrypt(entry);
ct += t1;
});
}
var y = k.decrypt(b64tohex(string));
return y;
} catch (ex) {
return false;
}
};

附:如有不明白或者问题可以在下方留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息