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) { const encryptor = new JSEncrypt() encryptor.setPublicKey(publicKey1) // 设置公钥 const res=encryptor.encrypt(txt) return res // 对数据进行加密 } // 解密 function decrypt(txt) { const encryptor = new JSEncrypt() encryptor.setPrivateKey(privateKey2) // 设置私钥 return encryptor.decrypt(txt) // 对数据进行解密 } // Convert a hex string to a byte array function hexToBytes(hex) { for (var bytes:any = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16)); return bytes; } // Convert a byte array to a hex string function bytesToHex(bytes) { for (var hex:any = [], 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){ const encryptor = new JSEncrypt() encryptor.setPublicKey(publicKey1) // 设置公钥 const res=encryptor.encryptLong2(string) return res // 对数据进行加密 }; export function decryptLong2(string) { const encryptor = new JSEncrypt() encryptor.setPrivateKey(privateKey2) // 设置私钥 return encryptor.decryptLong2(string) // 对数据进行解密 }; //方法2 JSEncrypt.prototype.encryptLong2 = function (string) { var k = this.getKey(); try { 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; } } } //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); } 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 ct;//hexToBytes(ct); } var t = k.encrypt(string); var y = t;//hexToBytes(t); return y; } catch (ex) { return false; } }; JSEncrypt.prototype.decryptLong2 = function (string) { console.log("decryptLong2"); console.log(string); var k = this.getKey(); // var maxLength = ((k.n.bitLength()+7)>>3); var MAX_DECRYPT_BLOCK = 128; try { var ct = ""; var t1; var bufTmp; var hexTmp; var str = string;//bytesToHex(string); var buf = hexToBytes(str); console.log("buf========"); 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.slice(offSet, endOffSet); hexTmp = bytesToHex(bufTmp); console.log("hexTmp=====1==="); console.log(hexTmp); t1 = k.decrypt(hexTmp); ct += t1; } else { bufTmp = buf.slice(offSet, inputLen); hexTmp = bytesToHex(bufTmp); console.log("hexTmp====2===="); console.log(hexTmp); t1 = k.decrypt(hexTmp); ct += t1; } offSet += MAX_DECRYPT_BLOCK; endOffSet += MAX_DECRYPT_BLOCK; } return ct; } catch (ex) { return false; } };