2013-02-26 41 views
2

我想在javascript中加密。在PHP中解密。
JavaScript AES加密庫是CryptoJS。
PHP AES加密庫是mcrypt。在JavaScript中加密並在PHP中解密

我得到了不正確的結果。
得到像'I4 L$ ' 「E̹_ zHe V : '的結果。

  • 加密(JavaScript的)

encrypt = CryptoJS.AES.encrypt('HelloWorld', 'test', {mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });

  • 解密(PHP)

$ ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC);
$ iv = mcrypt_create_iv($ ivSize,MCRYPT_RAND);
mcrypt_decrypt(MCRYPT_RIJNDAEL_256,'test',$ encrypt,MCRYPT_MODE_CBC,$ iv);

某處出錯了嗎?
謝謝。

+3

你爲什麼要那麼做? – 2013-02-26 18:32:22

+2

你確實意識到你將不得不在你的網頁上發佈你的密鑰才能看到整個世界?這使得加密類型毫無意義。 – jeroen 2013-02-26 18:34:40

+2

基本上,任何查看JavaScript源代碼的人都可以解密正在傳遞的數據。如果你想保護傳輸中的數據,你應該使用SSL。 – Sammitch 2013-02-26 18:36:43

回答

0

如上評論指出,SSL是你實際上可以保護因

  1. 沒有SSL,任何人都可以修改或嗅出你的Javascript或網頁,因此它不能信任任何數據的唯一途徑。
  2. Javascript真的不允許基於非字符的數據非常好。 (即散列,編碼視頻等),因爲所有數據通常在內部默默轉換爲utf-16或utf-8。

這最後一點似乎是什麼導致你的問題。每一端的AES庫都可以加密,就好像它可以訪問二進制數據一樣,但是,Javascript正在告訴轉換加密數據是在某個字符集中。你可能想嘗試utf8decode或者使用iconv()來將它轉換爲真正的二進制數據。