我正在尝试使用带有以下代码的对称解密:
$encrypted = base64_decode($encryptedBase64String);
$returnText = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, key, $encrypted, MCRYPT_MODE_CBC, iv);
我遇到了奇怪的结果(没有人质疑)。我不知道为什么方法mcrypt_decrypt
返回带有填充的解密文本,其填充的字节值等于填充字符的数量。根据 php 手册,该方法应该用零值字节填充其返回值。
为了澄清这一点,我在下面放置了两个示例:
[以上mcrypt_decrypt
pad 的调用返回字符串长度为 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
'12345678901234567890'
长度 = 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}
我能做些什么来改变它?我在使用 rtrim("\0") 方法删除填充时遇到问题,因为填充不是空值。