2013年9月1日

Javascript 加密,PHP解密 AES加密方式

JavaScript 加密:

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/pad-zeropadding.js"></script>

function EncryptData(data)
{
var key = CryptoJS.enc.Latin1.parse("1234567812345678");
var iv  = CryptoJS.enc.Latin1.parse("1234567812345678");
var encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
return encrypted;
}


PHP解密
$key = "1234567812345678";
$iv = "1234567812345678";
$DecryptData = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($EncryptedData), MCRYPT_MODE_CBC, $iv),"\0");


注意一點,要把解密出來的後面\0來掉。
所以加了rtrim(XXX,"\0");
要不然Javascript比對會錯誤。


下面這一個我寫了一個SampleCode,但Key和iv的地方,需要做修改
Sample Code Download :

http://sdrv.ms/1aazyLW

2 則留言:

  1. 我是初學,請教如果client是瀏覽器,今天由js端使用aes加密傳送data到server,會遇到問題。

    js的code無法如同server端受保護,這樣是不是做aes加密也是枉然,因為key,iv會被竊取緣故?

    回覆刪除
  2. 1. 遇到什麼問題?錯誤訊息是?
    2. 基本上是的,他是沒有防護作用的,但可以應用在網址擾亂之類的!基本上還是建議server端加密。

    回覆刪除