删除填充功能

时间:2014-12-08 13:47:30

标签: php encryption

我在网上找到了以下解密功能。我发现的其他解密函数是这个函数的变种:

public function Decrypt($data) {
    $crypt = base64_decode($data);
    $iv_size = mcrypt_get_iv_size($this->Algo, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $decrypt = mcrypt_decrypt($this->Algo, $this->Key, $crypt, MCRYPT_MODE_ECB, $iv);

    $block = mcrypt_get_block_size('blowfish', 'ecb');
    $pad = ord($decrypt[($len = strlen($decrypt)) - 1]);
    return substr($decrypt, 0, strlen($decrypt) - $pad);
}

我的问题如下:ord()函数给出了一个字符的ASCII值。然后,此ASCII值用于涉及字符串长度的计算中。为什么会这样? (在我看来,填充的ASCII值不应与字符串长度一起使用。)

2 个答案:

答案 0 :(得分:1)

某些操作模式(如CBC和ECB)用于分组密码需要填充,因为密码仅针对完整块进行定义。因此填充用于填充明文直到下一个块边界。它还用于在每个字节对应填充长度的同时对填充的长度进行编码,ord()返回此“char”的整数。这种双重使用将得到的密文大小减少了一个块(其中将保留填充或明文的大小)。

显示的填充方案对应PKCS#5/PKCS#7

答案 1 :(得分:1)

填充由ASCII字符组成,其中添加的字符数量与填充值相同。

Ord用于确定该数字并删除填充。

更多信息:http://lukieb.blogspot.nl/2013/04/making-aes256-encryption-work-same-in.html