標籤:參考 檔案 做了 接下來 字母數 mcr key php檔案 空格
今天做了一個功能,需要js傳密碼到php檔案,對js密碼 進行判斷,為想為這個傳輸過程進行解密,參考了網上的一個方法(這個方法我只是使用了,並沒有太深瞭解0.0)
首先要引入3個js檔案 (在網上可搜尋到)
<script src="../public/js/aes.js"></script>
<script src="../public/js/md5.js"></script>
<script src="../public/js/pad-zeropadding.js"></script>
然後 附上我使用時的代碼
var data= "132465";//需要加密的資料
var key = CryptoJS.enc.Utf8.parse(‘1a1a1a1b1e1c1s12‘);
var iv = CryptoJS.enc.Utf8.parse(‘1111111111111111‘);
//上面2個參數不是很清楚,但是跟php檔案中的參數要相同(長度為16位,其他位元暫未嘗試)
var encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
var msg = encrypted.toString();//結果為加密後的字串
接下來是php檔案
$pass = str_replace(‘ ‘,‘+‘,$pass);
//第一個坑,上面之所以要把字串中的空格給替換為‘+‘,不替換下面解碼會出錯!!!
(這個是解決掉下面的坑後再測試時發現,有些加密解密會成功,有些會失敗,把加密後的字串獨立拿出來時才發現這個問題)
$privateKey = "1a1a1a1b1e1c1s12";
$iv = "1111111111111111";
//上面2個要跟前面js檔案的key和vi相同
$encryptedData = base64_decode($pass);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);
$decrypted =trim($decrypted);
第二個坑,上2步結束後,如果不用trim方法,列印var_dump($decrypted),會輸出加密前的值,但是!!!後面緊跟著一堆亂碼!
我查看原始碼發現,這些是 ‘�‘ 這個字元我一臉懵逼,搞了好多方法都沒去掉(果然菜雞),後來試了trim這個函數,馬上就沒了這些
亂碼(好氣!),就完全獲得到js加密前的密碼了(好像很簡單的樣子)。。。。特地寫了這篇文章來紀念我逝去的下午。
tips:我都是用字母數字底線測試的,漢子和特殊字元暫未測試!
js加密php解密(CryptoJS)碰到的坑