{"id":995,"date":"2023-03-12T08:10:55","date_gmt":"2023-03-12T00:10:55","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=995"},"modified":"2023-04-29T13:20:31","modified_gmt":"2023-04-29T05:20:31","slug":"frontend-crypto-js-aes-encryption-and-decryption","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/12\/frontend-crypto-js-aes-encryption-and-decryption\/","title":{"rendered":"\u524d\u7aef crypto-js AES \u52a0\u89e3\u5bc6"},"content":{"rendered":"<p>AES\uff0c\u9ad8\u7ea7\u52a0\u5bc6\u6807\u51c6\uff08\u82f1\u8bed\uff1a<code>Advanced Encryption Standard<\/code>\uff0c\u7f29\u5199\uff1aAES\uff09\uff0c\u5728\u5bc6\u7801\u5b66\u4e2d\u53c8\u79f0<code>Rijndael<\/code>\u52a0\u5bc6\u6cd5\uff0c\u662f\u7f8e\u56fd\u8054\u90a6\u653f\u5e9c\u91c7\u7528\u7684\u4e00\u79cd\u533a\u5757\u52a0\u5bc6\u6807\u51c6\u3002\u8fd9\u4e2a\u6807\u51c6\u7528\u6765\u66ff\u4ee3\u539f\u5148\u7684DES\uff0c\u5df2\u7ecf\u88ab\u591a\u65b9\u5206\u6790\u4e14\u5e7f\u4e3a\u5168\u4e16\u754c\u6240\u4f7f\u7528\u3002\u4e25\u683c\u5730\u8bf4\uff0cAES\u548c<code>Rijndael<\/code>\u52a0\u5bc6\u6cd5\u5e76\u4e0d\u5b8c\u5168\u4e00\u6837\uff08\u867d\u7136\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u4e8c\u8005\u53ef\u4ee5\u4e92\u6362\uff09\uff0c\u56e0\u4e3a<code>Rijndael<\/code>\u52a0\u5bc6\u6cd5\u53ef\u4ee5\u652f\u6301\u66f4\u5927\u8303\u56f4\u7684\u533a\u5757\u548c\u5bc6\u94a5\u957f\u5ea6\uff1aAES\u7684\u533a\u5757\u957f\u5ea6\u56fa\u5b9a\u4e3a128\u6bd4\u7279\uff0c\u5bc6\u94a5\u957f\u5ea6\u5219\u53ef\u4ee5\u662f128\uff0c192\u6216256\u6bd4\u7279\uff1b\u800cRijndael\u4f7f\u7528\u7684\u5bc6\u94a5\u548c\u533a\u5757\u957f\u5ea6\u53ef\u4ee5\u662f32\u4f4d\u7684\u6574\u6570\u500d\uff0c\u4ee5128\u4f4d\u4e3a\u4e0b\u9650\uff0c256\u6bd4\u7279\u4e3a\u4e0a\u9650\u3002\u5305\u62ec<code>AES-ECB<\/code>\u3001<code>AES-CBC<\/code>\u3001<code>AES-CTR<\/code>\u3001<code>AES-OFB<\/code>\u3001<code>AES-CFB<\/code>\u3002<\/p>\n<p><!-- more --><\/p>\n<p>JavaScript\u52a0\u5bc6\u5e93<code>Crypto-JS<\/code>\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/brix\/crypto-js\">https:\/\/github.com\/brix\/crypto-js<\/a><\/p>\n<p>CryptoJS (crypto.js) \u4e3a JavaScript \u63d0\u4f9b\u4e86\u5404\u79cd\u5404\u6837\u7684\u52a0\u5bc6\u7b97\u6cd5\u3002<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text\/html; charset=UTF-8&quot; \/&gt;\n    &lt;title&gt;&lt;\/title&gt;\n\n    &lt;script src=&quot;.\/crypto-js\/src\/core.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/evpkdf.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/cipher-core.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/md5.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/aes.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/tripledes.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/enc-base64.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/enc-utf16.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/format-hex.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/hmac.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/lib-typedarrays.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/mode-cfb.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/mode-ctr.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/mode-ctr-gladman.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/mode-ecb.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/mode-ofb.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/pad-ansix923.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/pad-iso10126.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/pad-iso97971.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/pad-nopadding.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;.\/crypto-js\/src\/pad-zeropadding.js&quot;&gt;&lt;\/script&gt;\n    &lt;script src=&quot;https:\/\/cdn.staticfile.org\/jquery\/3.2.1\/jquery.min.js&quot;&gt;&lt;\/script&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;button id=&quot;md5&quot;&gt;MD5&lt;\/button&gt;\n&lt;button id=&quot;aes&quot;&gt;AES&lt;\/button&gt;\n\n&lt;script&gt;\n\n$(function() {\n    $(&quot;#md5&quot;).click(function(){\n        console.log(&quot;\u6d4b\u8bd5&quot;);\n        \/\/MD5\n        var md5Str = CryptoJS.MD5(&quot;key&quot;).toString(CryptoJS.enc.Hex).toUpperCase();\n        console.log(&quot;MD5\u540e\u5f97\u5230\u7684\u5b57\u7b26\u4e32\uff1a%s&quot;, md5Str)\n        return false;\n    });\n\n    $(&quot;#aes&quot;).click(function() {\n        var encrypted = getAES(&#039;AppBlog.CN&#039;)\n        console.log(&quot;AES\u52a0\u5bc6\u5f97\u5230\u7684\u5b57\u7b26\u4e32\uff1a%s&quot;, encrypted)\n        var decrypted = getDeAes(encrypted)\n        console.log(&quot;AES\u89e3\u5bc6\u5f97\u5230\u7684\u5b57\u7b26\u4e32\uff1a%s&quot;, decrypted)\n\n        \/********************\/\n        var key = &#039;12345678&#039;;\n        console.log(&#039;\u5bc6\u94a5\uff1a&#039;, key);\n        key = CryptoJS.enc.Hex.parse(key)\n        var src = &quot;AppBlog.CN&quot;;\n        console.log(&#039;\u539f\u5b57\u7b26\u4e32\uff1a&#039;, src);\n        var enc = CryptoJS.AES.encrypt(src ,key, {\n            mode: CryptoJS.mode.ECB,  \n            padding: CryptoJS.pad.Pkcs7\n        })\n\n        var encode = enc.ciphertext.toString()\n        console.log(&quot;\u52a0\u5bc6\uff1a&quot;, encode);\n\n        var decode = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(encode), key, {\n            \/\/iv:iv,\n            mode: CryptoJS.mode.ECB,\n            padding: CryptoJS.pad.Pkcs7\n        })\n        console.log(&#039;\u89e3\u5bc6\uff1a&#039;, CryptoJS.enc.Utf8.stringify(decode));\n\n        return false;\n    });\n\n    function getAesString(data, key, iv) {  \/\/\u52a0\u5bc6\n        var key = CryptoJS.enc.Utf8.parse(key);\n        var iv  = CryptoJS.enc.Utf8.parse(iv);\n        var encrypted = CryptoJS.AES.encrypt(data, key,\n            {\n                iv: iv,  \/\/CBC\u6a21\u5f0f\u9700\u8981\u6307\u5b9a\u504f\u79fb\u91cf\n                mode: CryptoJS.mode.CBC,\n                padding: CryptoJS.pad.Pkcs7\n            });\n        console.log(encrypted.ciphertext.toString())\n        return encrypted.ciphertext.toString()\n        \/\/return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);  \/\/\u8fd4\u56deBase64\u683c\u5f0f\u7684\u5bc6\u6587\n    }\n\n    function getDeAesString(encrypted, key, iv) {  \/\/\u89e3\u5bc6\n        var key = CryptoJS.enc.Utf8.parse(key);\n        var iv  = CryptoJS.enc.Utf8.parse(iv);\n        var decrypted = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(encrypted), key,\n        \/\/var decrypted = CryptoJS.AES.decrypt(CryptoJS.enc.Base64.parse(encrypted), key,\n            {\n                iv: iv,\n                mode: CryptoJS.mode.CBC,\n                padding: CryptoJS.pad.Pkcs7\n            });\n        return decrypted.toString(CryptoJS.enc.Utf8);\n    }\n\n    function getAES(data) {  \/\/\u52a0\u5bc6\n        var key = &#039;12345678&#039;;  \/\/\u5bc6\u94a5\uff08\u6570\u4f4d\u4e3a8\u7684\u6574\u6570\u500d\uff09\n        var iv  = &#039;1234567812345678&#039;;\n        var encrypted = getAesString(data, key, iv);  \/\/\u5bc6\u6587\n        var encryptedStr = CryptoJS.enc.Utf8.parse(encrypted);\n        return encrypted;\n    }\n\n    function getDeAes(data) {  \/\/\u89e3\u5bc6\n        var key = &#039;12345678&#039;;  \/\/\u5bc6\u94a5\uff08\u6570\u4f4d\u4e3a8\u7684\u6574\u6570\u500d\uff09\n        var iv  = &#039;1234567812345678&#039;;\n        var decryptedStr = getDeAesString(data, key, iv);\n        return decryptedStr;\n    }\n});\n&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>AES\uff0c\u9ad8\u7ea7\u52a0\u5bc6\u6807\u51c6\uff08\u82f1\u8bed\uff1aAdvanced Encryption Standard\uff0c\u7f29\u5199\uff1aAES\uff09\uff0c\u5728\u5bc6\u7801\u5b66 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33],"tags":[260,276],"class_list":["post-995","post","type-post","status-publish","format-standard","hentry","category-frontend-basic","tag-aes","tag-cryptojs"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=995"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/995\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}