我試圖使用對稱解密的代碼如下:mcrypt_decrypt - 奇怪的填充(不違約,不空)
$encrypted = base64_decode($encryptedBase64String);
$returnText = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, key, $encrypted, MCRYPT_MODE_CBC, iv);
而且我遇到奇怪的結果(因爲沒有人質疑)。 我不知道爲什麼方法mcrypt_decrypt
返回解密的文本,填充字節值等於填充的字符數。根據PHP手冊,該方法應該填充零值字節的返回值。
爲了闡明它,我已經把下面兩個例子:
[以上的mcrypt_decrypt
焊盤調用返回字符串的32長度]
例1
明文= '文本'
'text'的長度是4,所以填充大小是28個字符(32 - 4)
所以我接收returnText爲:
{\116\101\120\116\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28}
例2
'123456789'
長度= 20
{\49\50\51\52\53\54\55\56\57\48\49\50\51\52\53\54\55\56\57\48\12\12\12\12\12\12\12\12\12\12\12\12}
我能做些什麼來改變它?由於填充不是null,因此使用方法rtrim(「\ 0」)刪除填充問題。
注意的Rijndael-256是不是已經被標準化爲AES算法,對於兼容性,你應該嘗試使用Rijndael- 128,可能帶有256位密鑰(128位是塊大小,而不是AES的密鑰大小)。 – 2012-07-16 19:13:57