删除填充功能


Remove padding function

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

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 值组成,都不应与字符串长度一起使用。

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

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

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

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

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