2014-10-29 191 views
2

在PHP加密與mcrypt的用PHP加密解密後AES使用Javascript CryptoJS mcrypt的

<?php 
$string = 'Secret Message'; 
$key = 'd4b494e4502a62edd695a903a94c2701'; 
$iv = '02f30dffbb0d084755f438f7d8be4a7d'; 

$encrypted = base64_encode(
    mcrypt_encrypt(
     MCRYPT_RIJNDAEL_256, 
     $key, 
     $string, 
     MCRYPT_MODE_CBC, 
     $iv 
    ) 
); 
//$encrypted results in 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg=' 
?> 

在Javascript解密與CryptoJS

<script> 
var encrypted = 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg='; 
var key = CryptoJS.enc.Hex.parse('d4b494e4502a62edd695a903a94c2701'); 
var iv = CryptoJS.enc.Hex.parse('02f30dffbb0d084755f438f7d8be4a7d'); 

var decrypted = CryptoJS.AES.decrypt(encrypted,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}); 

console.log(decrypted.toString(CryptoJS.enc.Utf8)); //prints an empty string 
</script> 

我無法弄清楚如何讓Javascript一邊吐出原文。

+1

MCRYPT_RIJNDAEL_256是* not * AES; MCRYPT_RIJNDAEL_128是。 – 2014-10-29 11:25:27

+0

謝謝,但是有沒有辦法在JavaScript中解密256位塊的RIJNDAEL密碼? – 2014-10-29 23:14:33

+0

當然,找到一個Rijndael JavaScript實現。 – 2014-10-30 00:07:41

回答

6

解決

注:我發現 「MCRYPT_RIJNDAEL_256」 在PHP的mcrypt的不包括在AES。它使用Rijndael方法,但使用256位塊大小(不包括在AES中)。因此,CryptoJS不處理Rijndael的256位塊大小。謝謝,GregS

儘管如此,我發現成功解密密文,我從上面跑我的PHP的mcrypt功能,採用MCRYPT_RIJNDAEL_256(Rijndael算法,256位數據塊大小,使用256位密鑰得到執行/ 32-字節鍵)。

這就是: https://code.google.com/p/js-mcrypt/

<script> 
var encrypted = 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg='; 
var key = 'd4b494e4502a62edd695a903a94c2701'; 
var iv = '02f30dffbb0d084755f438f7d8be4a7d'; 
var decrypted = mcrypt.Decrypt(atob(encrypted), iv, key, 'rijndael-256', 'cbc'); 
</script> 

我希望這可以幫助別人,因爲我花了一個星期的業餘時間試圖弄清楚這一點,幾乎放棄了。

+1

它適合我。但解密後我得到額外的空間。你能幫我解答嗎? – Manish 2017-07-19 16:20:33

+2

只需使用'decrypted.replace(/ \ 0/g,'替換文字');' – 2017-07-19 16:49:17

相關問題