| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- 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(publicKey1) // 设置公钥
- 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);
- ct += t1;
-
- } else {
- bufTmp = buf.slice(offSet, inputLen);
- //hexTmp = bytesToHex(bufTmp);
- //console.log(hexTmp);
- t1 = decrypt(bufTmp);
- ct += t1;
-
- }
- offSet += MAX_DECRYPT_BLOCK;
- endOffSet += MAX_DECRYPT_BLOCK;
- }
- console.log(ct);
- return ct;
- };
|