cryptoAES111.ts 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
  2. // 密钥对生成 http://web.chacuo.net/netrsakeypair
  3. const publicKey1 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsiWEvEwTJxDsLqfHJaxeXvLL200H7NiMdQ1GK+OGst3NZHX4fjYnyDkc6QCK0CgTJeNO1/UZ26Pv55C98gXH0uzitoT2XGfJY5WDISvpv9vdOBCd60urdsaW9mrst4YxUjZO5nljlWnImnpa+vmS5NHWGNZdsUvMWGEWLM/kijwIDAQAB";
  4. 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";
  5. const publicKey2 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDR8l+B4jG6mEyMW8LYoNwMAUGnbZzDoKBSB1N4o19NscpyOA5m5Yyy2PDeja+iRNOwC7KTmKynd0Qzt8kwVnZHxA+oeKpNpepMS/+felan/QDgUD3u0Tix/sxuZ7GVB2h4X39wJTfgItNC7IK1qNQSZMkBfPhSQKQktkIlPU78BwIDAQAB";
  6. 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==";
  7. // 加密
  8. function encrypt(txt) {
  9. const encryptor = new JSEncrypt()
  10. encryptor.setPublicKey(publicKey1) // 设置公钥
  11. const res=encryptor.encrypt(txt)
  12. return res // 对数据进行加密
  13. }
  14. // 解密
  15. function decrypt(txt) {
  16. const encryptor = new JSEncrypt()
  17. encryptor.setPrivateKey(privateKey2) // 设置私钥
  18. return encryptor.decrypt(txt) // 对数据进行解密
  19. }
  20. // Convert a hex string to a byte array
  21. function hexToBytes(hex) {
  22. for (var bytes:any = [], c = 0; c < hex.length; c += 2)
  23. bytes.push(parseInt(hex.substr(c, 2), 16));
  24. return bytes;
  25. }
  26. // Convert a byte array to a hex string
  27. function bytesToHex(bytes) {
  28. for (var hex:any = [], i = 0; i < bytes.length; i++) {
  29. hex.push((bytes[i] >>> 4).toString(16));
  30. hex.push((bytes[i] & 0xF).toString(16));
  31. }
  32. return hex.join("");
  33. }
  34. //分段加解密---------------------------------
  35. //方法2
  36. export function encryptLong2(string){
  37. const encryptor = new JSEncrypt()
  38. encryptor.setPublicKey(publicKey1) // 设置公钥
  39. const res=encryptor.encryptLong2(string)
  40. return res // 对数据进行加密
  41. };
  42. export function decryptLong2(string) {
  43. const encryptor = new JSEncrypt()
  44. encryptor.setPrivateKey(privateKey2) // 设置私钥
  45. return encryptor.decryptLong2(string) // 对数据进行解密
  46. };
  47. //方法2
  48. JSEncrypt.prototype.encryptLong2 = function (string) {
  49. var k = this.getKey();
  50. try {
  51. var lt = "";
  52. var ct = "";
  53. //RSA每次加密117bytes,需要辅助方法判断字符串截取位置
  54. //1.获取字符串截取点
  55. var bytes = new Array();
  56. bytes.push(0);
  57. var byteNo = 0;
  58. var len, c;
  59. len = string.length;
  60. var temp = 0;
  61. for (var i = 0; i < len; i++) {
  62. c = string.charCodeAt(i);
  63. if (c >= 0x010000 && c <= 0x10FFFF) {
  64. byteNo += 4;
  65. } else if (c >= 0x000800 && c <= 0x00FFFF) {
  66. byteNo += 3;
  67. } else if (c >= 0x000080 && c <= 0x0007FF) {
  68. byteNo += 2;
  69. } else {
  70. byteNo += 1;
  71. }
  72. if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {
  73. if (byteNo - temp >= 114) {
  74. bytes.push(i);
  75. temp = byteNo;
  76. }
  77. }
  78. }
  79. //2.截取字符串并分段加密
  80. if (bytes.length > 1) {
  81. for (var i = 0; i < bytes.length - 1; i++) {
  82. var str;
  83. if (i == 0) {
  84. str = string.substring(0, bytes[i + 1] + 1);
  85. } else {
  86. str = string.substring(bytes[i] + 1, bytes[i + 1] + 1);
  87. }
  88. var t1 = k.encrypt(str);
  89. ct += t1;
  90. }
  91. ;
  92. if (bytes[bytes.length - 1] != string.length - 1) {
  93. var lastStr = string.substring(bytes[bytes.length - 1] + 1);
  94. ct += k.encrypt(lastStr);
  95. }
  96. return ct;//hexToBytes(ct);
  97. }
  98. var t = k.encrypt(string);
  99. var y = t;//hexToBytes(t);
  100. return y;
  101. } catch (ex) {
  102. return false;
  103. }
  104. };
  105. JSEncrypt.prototype.decryptLong2 = function (string) {
  106. console.log("decryptLong2");
  107. console.log(string);
  108. var k = this.getKey();
  109. // var maxLength = ((k.n.bitLength()+7)>>3);
  110. var MAX_DECRYPT_BLOCK = 128;
  111. try {
  112. var ct = "";
  113. var t1;
  114. var bufTmp;
  115. var hexTmp;
  116. var str = string;//bytesToHex(string);
  117. var buf = hexToBytes(str);
  118. console.log("buf========");
  119. console.log(buf);
  120. var inputLen = buf.length;
  121. //开始长度
  122. var offSet = 0;
  123. //结束长度
  124. var endOffSet = MAX_DECRYPT_BLOCK;
  125. //分段加密
  126. while (inputLen - offSet > 0) {
  127. if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
  128. bufTmp = buf.slice(offSet, endOffSet);
  129. hexTmp = bytesToHex(bufTmp);
  130. console.log("hexTmp=====1===");
  131. console.log(hexTmp);
  132. t1 = k.decrypt(hexTmp);
  133. ct += t1;
  134. } else {
  135. bufTmp = buf.slice(offSet, inputLen);
  136. hexTmp = bytesToHex(bufTmp);
  137. console.log("hexTmp====2====");
  138. console.log(hexTmp);
  139. t1 = k.decrypt(hexTmp);
  140. ct += t1;
  141. }
  142. offSet += MAX_DECRYPT_BLOCK;
  143. endOffSet += MAX_DECRYPT_BLOCK;
  144. }
  145. return ct;
  146. } catch (ex) {
  147. return false;
  148. }
  149. };