<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="keywords" content="基於PHP和JS的AES相互加密解密方法詳解,AES加密解密"> <meta name="description" content="基於PHP和JS的AES相互加密解密方法詳解,AES加密解密,PHP開發"> <meta name="author" content="wrongcode"> <meta name="version" content="1.0.0"> <title>基於PHP和JS的AES相互加密解密方法詳解(CryptoJS)</title> <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script> <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/aes.min.js"></script> <script src="https://cdn.bootcss.com/zepto/1.1.5/zepto.min.js"></script> </head> <body> <div style="margin: 0;text-align:center;"> <h2>基於PHP和JS的AES相互加密解密方法詳解(CryptoJS)</h2> <a href="https://blog.csdn.net/Zhihua_W/article/details/79388297" target="_blank"><h5>(原文地址)</h5></a> </div> <div style="margin:0 18%;"> <h4>注意說明:</h4> <ul> <li>1. 首先引入CryptoJS包中的aes.js和pad-zeropadding.js</li> <li>2. 其次引入了jquery.min.js和本身封裝的function.js(內容主要是加密解密函數)</li> <li>3. 加密解密過程當中的向量和密鑰必須保持一致</li> <li>4. 進行加密的數據(字符串類型):{"username":"1001","password":"123456"}</li> <li>5. 加密結果是變化的在這不寫(變化的緣由是由於密鑰取得是當前時間)</li> <li>6. 具體詳情可讀代碼(註釋完整)</li> </ul> </div> <div style="margin:0 18%;"> <h4>加密測試:</h4> <ul> <li>進行加密的數據(字符串類型):{"username":"1001","password":"123456"}</li> <li id="encrypt_key"></li> <li id="encrypt_string"></li> </ul> </div> <div style="margin:0 18%;"> <h4>解密測試:</h4> <ul> <li>進行解密密的數據(字符串類型、PHP端生成):sOSLA1pWIVbwiQFkf0pcCut292sd/s55mb9NWMoZ4uJ7+7fWIChAfijY0LxDShb7</li> <li id="decrypt_key">解密的密鑰(PHP端生成):</li> <li id="decrypt_string">JS解密後字符串:</li> </ul> </div> <script type="text/javascript"> /** * 接口數據加密函數 * @param str string 需加密的json字符串 * @param key string 加密key(16位) * @param iv string 加密向量(16位) * @return string 加密密文字符串 */ function encrypt(str, key, iv) { //密鑰16位 var key = CryptoJS.enc.Utf8.parse(key); //加密向量16位 var iv = CryptoJS.enc.Utf8.parse(iv); var encrypted = CryptoJS.AES.encrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); return encrypted; } /** * 接口數據解密函數 * @param str string 已加密密文 * @param key string 加密key(16位) * @param iv string 加密向量(16位) * @returns {*|string} 解密以後的json字符串 */ function decrypt(str, key, iv) { //密鑰16位 var key = CryptoJS.enc.Utf8.parse(key); //加密向量16位 var iv = CryptoJS.enc.Utf8.parse(iv); var decrypted = CryptoJS.AES.decrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); return decrypted.toString(CryptoJS.enc.Utf8); } </script> <script> //********************************加密********************************** //獲取當前時間戳13位 + 3位字符 var timestamp = new Date().getTime().toString() + "WZH"; //加密密鑰16位 var encrypt_key = timestamp; //加密向量16位 var iv = 'ZZWBKJ_ZHIHUAWEI'; //要加密的數據 var encrypt_string = '{"username":"1001","password":"123456"}'; //加密後密文(加密函數在function.js文件中) var encrypted_string = encrypt(encrypt_string, encrypt_key, iv); $("#encrypt_key").text("【JS加密密鑰】:" + encrypt_key); $("#encrypt_string").text("【JS加密後字符串】:" + encrypted_string); //********************************結束********************************** //********************************解密********************************** //解密密鑰16位(解密向量同上) var decrypt_key = '1565000236007WZH'; //解密密文字符串 var decrypt_string = "sOSLA1pWIVbwiQFkf0pcCut292sd/s55mb9NWMoZ4uJ7+7fWIChAfijY0LxDShb7"; var decrypted_string = decrypt(decrypt_string, decrypt_key, iv); $("#decrypt_key").text("【解密的密鑰(PHP端生成)】:" + decrypt_key); $("#decrypt_string").text("【JS解密後字符串】:" + decrypted_string); //********************************結束********************************** </script> </body>