jsencrypt.js 分段以及不分段加解密
如果所用的key为128位,则只能加密117bytes,因此,有时候我们需要分段加密解密
使用jsencrypt 不分段加解密
- 引入 jsencrypt.js
// 引入 jsencrypt.js
import JsEncrypt from "jsencrypt/bin/jsencrypt.js";
- 获取公钥
一般为从后台接口获取公钥
// 接口获取公钥
let publicKey = ' MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCNC18+lr+E8eRy267pgQ0+4D+VoQMusq70Ujf5eXHvJTtc7XECTCJWSJBSYb3QGojvj6SC7bHuBNz3M0caiaHdS3y+YwLAa1q5oWR+6YSUFFqPXcZamUymE3T6lBD/AR56RApe5WAUcMDHy33IUJTKLQnZJQcfzrPQ0EgK/tuwSQIDAQAB '
- 使用 JsEncrypt
// 1. 创建JsEncrypt 对象
let jse = new JsEncrypt()
// 2. 给jse对象设置publicKey
jse.setPublicKey( publicKey)
// 3. 从表单拿到密码并加密
let encryptPw = jse.encrypt(this.loginForm.password)
- 完整方法
// 加密
/**
* encrypt string
* @param string
* @returns {*}
*/
function rsaEncrypt(str,publicKey){
let enJse = new JSEncrypt();
str.setPublicKey(publicKey);
ley encryptStr = str.encrypt(str);
return encryptStr ;
}
// 解密
/**
*decrypt string
* @param string
* @returns {*}
*/
function rsaDecrypt(str,publicKey){
var deJse = new JSEncrypt();
deJse .setPrivateKey(publicKey);
var decryptStr = deJse .decrypt(msg);
return decryptStr ;
}
使用jsencrypt 分段加解密
- 分段加密
// 在JsEncrypt原型上写了分段加密方法 encryptLong 使用时替换encrypt方法即可
JsEncrypt.prototype.encryptLong = function (string) {
var k = this.getKey();
var maxLength = (((k.n.bitLength() + 7) >> 3) - 11);
try {
var lt = "";
var ct = "";
if (string.length > maxLength) {
lt = string.match(/.{1,50}/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;
}
};
- 分段解密
// // 在JsEncrypt原型上写了分段加密方法 encryptLong 使用时替换decrypt方法即可
JSEncrypt.prototype.decryptLong = function (string) {
var k = this.getKey();
var maxLength = ((k.n.bitLength() + 7) >> 3);
//var maxLength = 128;
try {
var str = bytesToHex(string);
//var b=hex2Bytes(str);
var inputLen = str.length;
var ct = "";
if (str.length > maxLength) {
var lt = str.match(/.{1,256}/g);
lt.forEach(function (entry) {
var t1 = k.decrypt(entry);
ct += t1;
});
return ct;
}
var y = k.decrypt(bytesToHex(string));
return y;
} catch (ex) {
return false;
}
};