我试图使用对称解密的代码如下: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