2013-03-10 20 views
5

我正在尋找答案,但在這裏找不到它。請原諒,如果這個問題已經被問到。PHP mcrypt_encrypt/mcrypt_decrypt問題,返回一個不同的值

我有一個簡單的代碼加密和解密字符串,字符串看起來是一樣的,但使用==他們似乎不相同比較時他們,所以哈希值是不同以及..

這裏是我的代碼:

$oppa = "rompish"; 
$opp_enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, "key", $oppa, MCRYPT_MODE_ECB); 
$opp_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, "key", $opp_enc, MCRYPT_MODE_ECB); 

echo $oppa."<br />".$opp_dec."<br />"; 

if ($oppa == $opp_dec) echo "YAY"; else echo "NOPE"; 

在頁面:

rompish rompish NOPE

請告訴我我做錯了什麼。

謝謝!

+2

AES始終以16字節的塊加密事物。顯然'mcrypt_encrypt'用零字節填充字符串,直到它是16的倍數。'mcrypt_decrypt'忠實地解密這個,但缺少刪除填充的信息。而且你在欺騙自己,因爲即使oppa_dec實際上以9個零字節結尾,顯示的值看起來也是一樣的。改爲使用合理的填充方案。 – 2013-03-10 02:23:44

+0

這是一個答案,而不是評論,GregS(做到這一點,否則我會發布它,包括你的名字在最後:P) – 2013-03-10 23:06:30

回答

2

AES始終以16個字節的塊加密事物。顯然 mcrypt_encrypt用零字節填充字符串,直到它是 的倍數16. mcrypt_decrypt盡職盡責解密但缺少 信息以刪除填充。並且你在欺騙自己 ,因爲即使oppa_dec 實際上以9個零字節結尾,所顯示的值看起來相同。改爲使用合理的填充方案 。 - GregS

要刪除這些空字符,可以使用rtrim函數。通過它運行解密後的輸出應該是相等的。