2
我試圖做一個加密/解密例程使用mcrypt
但它似乎攪亂數據即時嘗試加密。mcrypt搞亂數據
赫雷什的代碼:
$data = 'Some important data';
$key = "mycryptKey";
$cipher = "rijndael-128";
$encryptedData = mcrypt_encrypt($cipher, $key, $data, MCRYPT_MODE_ECB);
$decryptedData = mcrypt_decrypt($cipher, $key, $encryptedData, MCRYPT_MODE_ECB);
var_dump($data); //string 'Some important data' (length=19)
var_dump($encryptedData); //string '™ì{*¾xv-&n5’Œü½Ýëc®n)mSƒ7]' (length=32)
var_dump($decryptedData); //string 'Some important data�������������' (length=32)
它保持在原來的字符串的末尾添加這些字符。 我在How do you Encrypt and Decrypt a PHP String?看到一個例子,但它沒有工作
那就是實際測試。關鍵和我使用的數據在這裏
編輯
我意識到,@jonhopkins意見後,認爲mcrypt的被填充後$數據內容有些「\ 0」字貼一樣,所以我使用'strtok'解密後清理它:
$decryptedData = \strtok(mcrypt_decrypt($cipher, $key, $encryptedData, MCRYPT_MODE_ECB), "\0");
var_dump($decryptedData); //string 'Some important data' (length=19)
如果我不得不猜測,我猜測加密方法會自動填充字符串。 IIRC rijndael-128要求其輸入的長度爲16的倍數,所以'mcrypt_encrypt'填充0到32字節,但我認爲'mcrypt_decrypt'無法確定原始長度,因此它將離開這些額外的字節。 – jonhopkins 2015-02-06 03:34:46
你是天才@jonhopkins!但是繼承人另一個問題:如果我傳遞給mcrypt之前必須修改它,如何返回相同的數據? – CarlosCarucce 2015-02-06 03:50:48
這是一個很好的問題,我希望我知道答案......我甚至不能100%確定發生了什麼事情。但如果我能找到任何我會讓你知道的。編輯:http://stackoverflow.com/q/20507050這可能會幫助 – jonhopkins 2015-02-06 03:54:39