protected function cryptPadText($text, $mode, $blockSize, $paddingType)
{
$paddingSize = 0;
$padding = null;
if ($mode == MCRYPT_MODE_CBC || $mode == MCRYPT_MODE_ECB) {
$paddingSize = $blockSize - strlen($text) % $blockSize;
if ($paddingSize >= 256) {
throw new Exception("Block size is bigger than 256");
}
switch ($paddingType) {
case self::PADDING_ANSI_X_923:
$padding = str_repeat(chr(0), $paddingSize - 1) . chr($paddingSize);
break;
case self::PADDING_PKCS7:
$padding = str_repeat(chr($paddingSize), $paddingSize);
break;
case self::PADDING_ISO_10126:
$padding = "";
foreach (range(0, $paddingSize - 2) as $i) {
$padding .= chr(rand());
}
$padding .= chr($paddingSize);
break;
case self::PADDING_ISO_IEC_7816_4:
$padding = chr(0x80) . str_repeat(chr(0), $paddingSize - 1);
break;
case self::PADDING_ZERO:
$padding = str_repeat(chr(0), $paddingSize);
break;
case self::PADDING_SPACE:
$padding = str_repeat(" ", $paddingSize);
break;
default:
$paddingSize = 0;
break;
}
}
if (!$paddingSize) {
return $text;
}
if ($paddingSize > $blockSize) {
throw new Exception("Invalid padding size");
}
return $text . substr($padding, 0, $paddingSize);
}