decrypt.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>解密日志-不要转发给别人</title>
  7. </head>
  8. <body>
  9. <div>
  10. <textarea name="" id="encryptLog" cols="100" rows="50"></textarea>
  11. <div></div>
  12. <button onclick="goDecrypt()">解密</button>
  13. <div id="result"></div>
  14. </div>
  15. <script>
  16. async function goDecrypt() {
  17. const encryptLog = document.querySelector("#encryptLog").value;
  18. async function replaceAsync(str, regex, asyncFn) {
  19. const promises = [];
  20. str.replace(regex, (match, ...args) => {
  21. const promise = asyncFn(match, ...args);
  22. promises.push(promise);
  23. });
  24. const data = await Promise.all(promises);
  25. return str.replace(regex, () => data.shift());
  26. }
  27. const res = await replaceAsync(
  28. encryptLog,
  29. />>==>>(.*)<<==<</g,
  30. async (v, p1) => await decrypt(p1)
  31. );
  32. // decrypt(encryptLog);
  33. document.querySelector("#result").innerText = res;
  34. }
  35. const originalConsoleLog = console.log;
  36. async function decrypt(base64) {
  37. // const base64 = `Tgg2t8rAYeGD0agDIzgh6Fr7odSHdK4E16lEYTc7Z3/grtkqw54AzELuWdH4OH1+ZHRvaGoJ/O6CrzDMQifT/JutKGaRnuAZky7SQaet+msYtbwHLXjQkwLYeewsvATWLRsV3wS+feF939CHQAqwzaO4zRncVTyVD2sDS61UAB7Sk5V7z+HRSmmXtxVuCdSAUMdDFcW20nBz3tP/0AjiH2l1aVbuYffz9ekiZDfgzdLDHKGkbIRVK0hQZROHaE/hDxbMVGqk9A4/ntoyKay7sNB8kCS8QiL9PTuFrXfAiqmlXBX6+xHxHWyJnus/JZk4oGl3WCzWKhwSCDy6PIgUMro48Z820szQ3eLtNVGuiSfPRGpBon8bxhW9MfiobQsZOp7FKTPjxnY9XwOAWLfIr5Z7aALIC4LkFxm7mQRWkVRhppqOl7fdVeZenWCQsSlhC/P4yUk+LtQu0bBhJOa/oGRv3LHWx00bHS0JPCkCnFLIzYCV2yAD5se2PaoPil2OUMEarXsQWiNlQxnErsQYs3zEcLq5//RpcnfypF9gIcdshvPpVjxpvHSoZr61whV11Uw/l8oSzFf53MR7FP6IHsh4ikHS7P00HsFXMh2dHQH5n+qBck2TtAZ5Kl9oaxZChuQlS2OnIfUVqI+ORZ1ksjo5GkW7XFZbVrcMkmDYeMY=`;
  38. const ab = window.atob(base64);
  39. originalConsoleLog.call(window, ab);
  40. var buf = new ArrayBuffer(ab.length);
  41. var bufView = new Uint8Array(buf);
  42. for (var i = 0, strLen = ab.length; i < strLen; i++) {
  43. bufView[i] = ab.charCodeAt(i);
  44. }
  45. originalConsoleLog.call(window, bufView);
  46. const jwkEcKey = {
  47. alg: "RSA-OAEP-256",
  48. d:
  49. "SQ9xIsgfBdHPKspGG8t3IK-8j3VVVYTmEP86wD0K7a8zgP54hS9JXOp-xEq3xn2Bb3wXDij01S3f5mE_tbZg5OWzGlT_zB9aBwnnRaRVS-tazgSbE4DJ5cUqWDXbH68A3HK-VqHO7pT0iFjF_rpx1vzrGY5HhxLeT7JJuE2JiUfnjmN3JT1294oqc6D5hAnZ7iUl4i9nLSJIKJV3Hs20FaVR3u5BDFFn-2tZazLYhfW1k0jZAWy0E7Bv6t8lr_aIKkV0emb2O3mEl9l58sMAxBc7MPJDeSb5CD3PGKUCz_ZXFw-S_Ye34-WGTQSRp1otj15eWa5Pn59ze4-hKUpxiXf2D-oj60j2FyjgHrXGTvA0V013PWBPjkGq7yoAeZyzBqrqry4I_xanbJt5BPZ-Su_r3bYgGyX8UWDasyt6-DiEJAVpxLSoqnVUkxipvhaAIPKFnPLMRtlaJ6fzjVNPyf3R6hYmsthOLvzzvneKZ_gOT1Ai-ClXP2uvAdXSzoRhbdIz_jigxWM9Y6V-1stOHcLYi1hl5MJz82yqs8y1fz2_Su9viQ2caIRyQJoxGcOE7erxj1tcmx5-VG7zUSQycaiMIbVg7dYtqXAeJc8iPAiNuX2lLHP6NpfZhmQ19TevNvFVHGxQuHL-wMGfPHRIedDP3pLuwYygdZ_S_N0MnOE",
  50. dp:
  51. "y9FtLP_LM7QN1B4lljlzxfHBNCg_al-E1r0JpGF6iwoAUM6d5AjJSOQMZut9Zo8A_IXjEOkQnqu1j03Cc6qYcZ1BXut0VyYVaa-kh8WcFutPmJ6CbTUzd4G9oxne1bDCENaIGBxiIcAz7G00d3rOqhRGxAN140IPA-6SJBBjT2kPIUVhL5b3FuBAVJmFzUL1WcRJ2ZlscLYjhj7gNRZD6Hj9ZLWfroDxnupVXjqa-fSaSULSKnZ9O42x7xjsRuDmh2O-H5bq4ik-2dO9MQ5cAVLAK3rIGCiBq_YMJ4NPXB4d5KC3T5gll2qcJNzu8y2qAIo-mU-34CCTFtvrCVeASQ",
  52. dq:
  53. "ONEU7cEKL5flMnSh_uGWJKHbxW1n-bWbzNmFGI24RdxmSwntlfZwnpzpkCgkkmWadFzg0luy6FByNPHCHBP1uQ2QPW5USv3QXmLwiVrjQaV5u0F57Is1e2T_uXhpffbCJcht2UM8zezMiouChZ7fMbl2aDN32uPJ92_tgSHEP-U6CpJunuvdXTif3k0Q73QnEQ0yFsoaMprTVspEkkYn6EbojKxpGsbqdIry8TFVPPd5XVzo17PmSfOVsN1xJsiQatqp1QH2SQzB0b-c2K2lMgkDU_8kyCMY_Wy7fwO8aT1oM_veSJbz1OEkhrV44ONF-iJ_qRVmHuXVXS82pWemZQ",
  54. e: "AQAB",
  55. ext: true,
  56. key_ops: ["decrypt"],
  57. kty: "RSA",
  58. n:
  59. "3vl4K5l_XhHYnm28Nz0YoaP7UTUPRQD4_S2btf1R1kzuVbbqg3eBru7OOcPSVOVFd0GGwy1cXlq1-J9XqFTEscFLIQYCimvLhtSDs7797b6DMwpWQ7Y_QvaVXhwgZZh7KlD0pLUtF2NwDYK10bPaWHEik-OwDCQE5P5Gv6Oz4TZZAjSpxOCNx_ui_KGeu8c63if1-mNwzn70U82LjhbHy3edDjAdT0JDPxqYPiMwSo8lhDy1CqFiyQxq2unPHJcRxb9fAwV3siyWOdHQaaKH2GvCxhpsPUHnVlIng02yeZBzv-UIz6fAPWNhC-6H_5GeZ_Qlk6qQIPzFQ3DPD82VGF9GWGbkdWgHm3JZsSyjjZXYSU3lmc3gaO8q5ZDGGlmh31ApOYddEsFcfYobI3RJwhlvAFHxr9YtRjXlaL-YUf_KwztJFFNw75WSWp8-WtMy96LL3cljjR3rxHYBjiOYDsReTIIeLEDEigcKFyswuc71qSIB6XQFxM6J6u3Urvu3uoPiu-aqujVj6gtOSfOHGvCXq05n3eBk89o2kY92J10v1ANDbZo6HneqKFKJ2Dh8uUaavdSJfHWc8QTy2b50HasxZj9mv_ADaBYaGb2C_tnNvgkusnHu87qxt95iqLPJOzMy4au0UD6kPZ8aTkGZq_b2gT9LHxi6PPdEOjRdVxs",
  60. p:
  61. "_x26H7eFjKNAjfdarx77zpEP4Azs3wGsVc6XIsiBfcfMifiwYW2NPHuHt7c6mUg_TfvrmIrnQPxPR8ldkuyiSZKy-rf7R6UywUKvv6q_xYVR1Q1-qBBQZ0m2TW9GmELifbAVbZsz8x-Hlr-J5ZqYnp-8_4bfF-7W_kMj-U3hAq-giGAd1GDSWP4BlBoK4LAHQmFsOX6v-iU6e6mloqfG7Phi_Nxzn5DqS608JXO7M0CxGbBjppFWp1Yw_C-FafjW0ZPEgOM6iQxeuyCDmtj2xbVT6qNoqRhh2O7VizsIdesI3jP-JMFZYSqeOcSI_9T1zofywe5-BEGDWU7yhruXeQ",
  62. q:
  63. "3788ETKL_i-jH88W-XDFfMEXN4zGHc4u3Oq1nC2rNChto8Sxk7SqBsq_YMip_OU3YJ_QfHxALVakzTSgEg941PKyyzcQ6RyxxC5guzrs5x83qoVq4Tib5fLxHeAcZwHBXqTGR3RLdHjijBtl0g7HrW93LjU5qP1WKZAHJ2ZBT130-5uZgpOOTqrTtj0WrqRTo6VZ_Swp6d1TjaNyjGTxywDnqHTAdOjKfYuDhlt4-YT5RnUQ5lJ7dbT89gylF2CfS4PnA2lsL-sAIX6znRisCTO84phspx3UQmsjxsOo8tRdq_MdBNllTu23VFvryuapme1iOlkF8TtZyhuQNSL6Mw",
  64. qi:
  65. "NAzHngXi5kXs97CuBnoXvtPD-7UHHrRhp4d_scVSp9cv_avBnrUVvJaSpWTJiT23HVd55bSlethL5r6qelPmcXf-q7fmmyyFIz9kXmR-FGY3jwxg_fQWvHlEUmlAVCI1jBZN6KYlbG1XQ6FVG18mDc0Uacv1qkaDHufOYnzU974vIdSux-Jx8Ds73nzDAfXx5kg-DUO_7Ci1OvA_WyXgWzh0j8I3opY0Sg_7VIdVLyXdUMUbZIHM45-qU_sssGMZjTzea3Iw16BL6CowlI_5aWGtWZTXB8MrdQnjSZCs9AJwJnuLx54KHg-duQ0GXNrUDJ-LMgPq9hlfITzPpA6oHQ",
  66. };
  67. const privateKey = await window.crypto.subtle.importKey(
  68. "jwk",
  69. jwkEcKey,
  70. {
  71. name: "RSA-OAEP",
  72. // modulusLength: 4096,
  73. // publicExponent: new Uint8Array([1, 0, 1]),
  74. hash: "SHA-256",
  75. },
  76. true,
  77. ["decrypt"]
  78. );
  79. try {
  80. const res = await window.crypto.subtle.decrypt(
  81. {
  82. name: "RSA-OAEP",
  83. // modulusLength: 4096,
  84. // publicExponent: new Uint8Array([1, 0, 1]),
  85. // hash: "SHA-256",
  86. },
  87. privateKey,
  88. bufView
  89. );
  90. originalConsoleLog.call(window, JSON.stringify(res));
  91. // const ab2str = function(buf) {
  92. // return String.fromCharCode.apply(null, new Uint8Array(buf));
  93. // };
  94. // originalConsoleLog.call(window, ab2str(res));
  95. let deenc = new TextDecoder();
  96. const deencoded = deenc.decode(res);
  97. originalConsoleLog.call(window, deencoded);
  98. return await deencoded;
  99. } catch (error) {
  100. originalConsoleLog.call(window, JSON.stringify(error));
  101. originalConsoleLog.call(window, error.name + error.message);
  102. }
  103. }
  104. </script>
  105. </body>
  106. </html>