1.网上下载jsencrypt.min.js文件,创建encrypt.js文件内容如下
var k = this.getKey();
var maxLength = 128;
function base64ToHex(base64) {
var raw = atob(base64);
var HEX = '';
for ( i = 0; i < raw.length; i++ ) {
var _hex = raw.charCodeAt(i).toString(16)
HEX += (_hex.length==2?_hex:'0'+_hex);
}
return HEX.toUpperCase();
}
try {
var string = base64ToHex(string);
var ct = "";
if (string.length > maxLength * 2) {
var lt = string.match(/.{1,256}/g); //128 Bit decryption . take 256 position
lt.forEach(function (entry) {
var t1 = k.decrypt(entry);
ct += t1;
});
return ct;
}
var y = k.decrypt(string);
return y;
} catch (ex) {
console.log(ex);
return false;
}
};
JSEncrypt.prototype.encryptLong = function (string) {
var k = this.getKey();
function hexToBase64(str) {
return btoa(String.fromCharCode.apply(null,
str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" "))
);
}
try {
var ct = "";
//RSA Every time the encryption 117bytes, An auxiliary method is needed to determine the location of the string interception
//1. Gets the string interception point
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) { // Special characters , Such as Ř,Ţ
byteNo += 4;
} else if (c >= 0x000800 && c <= 0x00FFFF) { // Chinese and punctuation
byteNo += 3;
} else if (c >= 0x000080 && c <= 0x0007FF) { // Special characters , Such as È,Ò
byteNo += 2;
} else { // English and punctuation
byteNo += 1;
}
if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {
if (byteNo - temp >= 114) {
bytes.push(i);
temp = byteNo;
}
}
}
//2. Intercepts a string and segments it for encryption
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 hexToBase64(ct);
}
var t = k.encrypt(string);
var y = hexToBase64(t);
return y;
} catch (ex) {
console.log(ex);
return false;
}
};
var jsKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWlaWzBITjy1H3AyRuEsLVcdI3rVW6vT8chSzwrhJufjYpXr8eDGU1u8OpFsQeLLrn0yQVxaQ/C7XxnytTgdfUne98QPUbUf2GgvhDk0EKouxzmW5JrhkfDNwnzQ1Gre9XCTwQGAXUgXNAAEgsnVNBz0CrW4poH10J7/onxTDKhQIDAQAB"
var encrypt = new JSEncrypt();
encrypt.setPublicKey(jsKey);
其中jskey是成对出现的公私钥,前端使用公钥加密,后端返回数据使用私钥解密 2.在使用的地方同时引入jsencrypt.min.js文件和encrypt.js,使用 encrypt.encryptLong(content)对字段加密,其中content是需要加密的字段 注意事项:1.在使用get方法传递加密的数据时,接收加密内容加号(+)展示成了''(空格),此时可以使用string.replace(' ','+')替换掉空格即可 2.ras加密分为固定一对公私钥加密和动态公私钥加密,根据项目实际需要选择不同的加密方式