import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' // 密钥对生成 http://web.chacuo.net/netrsakeypair const publicKey1 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsiWEvEwTJxDsLqfHJaxeXvLL200H7NiMdQ1GK+OGst3NZHX4fjYnyDkc6QCK0CgTJeNO1/UZ26Pv55C98gXH0uzitoT2XGfJY5WDISvpv9vdOBCd60urdsaW9mrst4YxUjZO5nljlWnImnpa+vmS5NHWGNZdsUvMWGEWLM/kijwIDAQAB"; const privateKey1 = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKyJYS8TBMnEOwup8clrF5e8svbTQfs2Ix1DUYr44ay3c1kdfh+NifIORzpAIrQKBMl407X9Rnbo+/nkL3yBcfS7OK2hPZcZ8ljlYMhK+m/2904EJ3rS6t2xpb2auy3hjFSNk7meWOVaciaelr6+ZLk0dYY1l2xS8xYYRYsz+SKPAgMBAAECgYEAgvrn5Cyz/dgSWxBwlU/PYUnHMsm91U+L6LMqPC4kZFIAJy7UiG+SwUdFm1sE/Vh9udUYI5ha3fqRD2vDAOnj737csBTUgpQOfp//tsyg/jX5ghAAeO8eeAs3ENwHpGVPYHnTu1kvlrW/Npn6BQ7IgbSRylTaIbOAXH7WBtI4UoECQQDXzCDaDx2iUohtmYcAzHwDU4CLmyeRCLIufD5xfjp0Oztd3mQcDJs5GYcyWJ/aDGIrs67rqwQP3ad6tq1+1WzpAkEAzK4MLGFwU295SjfYYY/TpKWyK9ijh5PWvySTxLZslr/sedLH64oo7KquhiG47JcnbBwJjqUJOeS8IbknWVkItwJBAKl88NxzfNHtwqtaJtdww4IVRmPfs37M9q1d9elLu/toPiNmtPf2yr9ZFn9rbfljOoOad6svQVx4ub6+1ZtFY2kCQBa25gDy201XHKXA5tGE7Z7jCI/XHebI4FccDw4QlKJyMCMg4jDgh0QkePPHwEb5S1WzEthytkBngv1XF+fReqcCQQCKmbA/ny8jdiraEhNYZDJXI3AOCDnUmBsGTqoxg7tk6ghqyjOeeJBIO1YTPDD2+OaCTEpZPbhK8Khyq417z7bV"; const publicKey2 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDR8l+B4jG6mEyMW8LYoNwMAUGnbZzDoKBSB1N4o19NscpyOA5m5Yyy2PDeja+iRNOwC7KTmKynd0Qzt8kwVnZHxA+oeKpNpepMS/+felan/QDgUD3u0Tix/sxuZ7GVB2h4X39wJTfgItNC7IK1qNQSZMkBfPhSQKQktkIlPU78BwIDAQAB"; const privateKey2 = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANHyX4HiMbqYTIxbwtig3AwBQadtnMOgoFIHU3ijX02xynI4DmbljLLY8N6Nr6JE07ALspOYrKd3RDO3yTBWdkfED6h4qk2l6kxL/596Vqf9AOBQPe7ROLH+zG5nsZUHaHhff3AlN+Ai00LsgrWo1BJkyQF8+FJApCS2QiU9TvwHAgMBAAECgYBhUmWLo/tBcFAr0G2mVgsrVXnFzz4YQWGQJO1AwxruvTgHcozajhaG4aHmyO9d3WHz/bguS1vd1Z+8CbotuibhjoiA464AL2sM9S490oYwLm39EFhSgG8JxovxrfpZ+fEpVjUjna40OSBvvtKtfhoBEjIRArd2Okkcx1f8f+MrgQJBAPL+5Rmtc9sLHDzhaqgP1Z0ntESLRN+JhqspFOaEibMdeBdlBbBfQ1HFdV8CsWLjzn/IM3JQnK4LnZ8hXwbWM/ECQQDdLrMFm5NESeYjlaLvBzHtQxTv6YOLz4I9++2YITa0+FvvRBhkLgrOYrO0yALIlrbdhxBnJDZzfYlpiJ/9pUd3AkEA4h4xoLBYpBd1om1864E4nXJJ/JLAd2cpavLioRPqc0PT8akvHw22vkwJyWzfFo+4JA5vWUwMUKU8esz5+YmwcQJADKftana6eH/aAVNAnXjF7JOYERpFgqx/AVj3AWt1G+nSKOC2nJTd3W1cZw3CywOEtyxRTfWOgBFA2Z8NuI/KhQJAIHAiOZH5P4s6WdNu3Gsg8HLcCtc+2Z8aeaBIDi+/L5pMHjiBVTtSEuPTvuhhan4ifGTV3uoJRRPO6re4F7mgZA=="; // 加密 function encrypt(txt) { // console.log(txt.length) const encryptor = new JSEncrypt() encryptor.setPublicKey(publicKey2) // 设置公钥 const res=encryptor.encrypt(txt) // var buf = hexToBytes(res); // console.log(buf.length,res.length); return res // 对数据进行加密 } // 解密 function decrypt(txt) { const encryptor = new JSEncrypt() encryptor.setPrivateKey(privateKey2) // 设置私钥 return encryptor.decrypt(txt) // 对数据进行解密 } //分段加解密--------------------------------- function hexToBytes(hex) {//字符转字节 for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16)); return bytes; } function bytesToHex(bytes) {//字节转字符 for (var hex = [], i = 0; i < bytes.length; i++) { hex.push((bytes[i] >>> 4).toString(16)); hex.push((bytes[i] & 0xF).toString(16)); } return hex.join(""); } //方法2 export function encryptLong2(string){ // console.log(string) // var lt = ""; var ct = ""; //RSA每次加密117bytes,需要辅助方法判断字符串截取位置 //1.获取字符串截取点 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) { byteNo += 4; } else if (c >= 0x000800 && c <= 0x00FFFF) { byteNo += 3; } else if (c >= 0x000080 && c <= 0x0007FF) { byteNo += 2; } else { byteNo += 1; } if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) { if (byteNo - temp >= 114) { bytes.push(i); temp = byteNo; } } } //console.log(bytes); //2.截取字符串并分段加密 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); } // console.log(str) var t1 = encrypt(str); ct += t1; //console.log(ct) } ; if (bytes[bytes.length - 1] != string.length - 1) { var lastStr = string.substring(bytes[bytes.length - 1] + 1); // console.log(lastStr) var t1 = encrypt(lastStr); ct += t1; //console.log(ct) } // console.log(ct) return ct; } var t = encrypt(string); return t; }; export function decryptLong2(string) { if(!string){ return ''; } // console.log(string); //return decrypt(string); // var maxLength = ((k.n.bitLength()+7)>>3); var MAX_DECRYPT_BLOCK = 172; var ct = ""; var t1; var bufTmp; var hexTmp; var buf = string;//hexToBytes(string); // console.log(buf.length); // console.log(buf); var inputLen = buf.length; //开始长度 var offSet = 0; //结束长度 var endOffSet = MAX_DECRYPT_BLOCK; //分段解密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_DECRYPT_BLOCK) { bufTmp = buf.substr(offSet, MAX_DECRYPT_BLOCK); //hexTmp = bytesToHex(bufTmp); t1 = decrypt(bufTmp); if(t1){ ct += t1; } else{ return null; } } else { bufTmp = buf.slice(offSet, inputLen); //hexTmp = bytesToHex(bufTmp); //console.log(hexTmp); t1 = decrypt(bufTmp); if(t1){ ct += t1; } else{ return null; } } offSet += MAX_DECRYPT_BLOCK; endOffSet += MAX_DECRYPT_BLOCK; } //console.log(ct); return ct; };