У меня проблема с режимом CBC, когда я пытаюсь зашифровать / расшифровать некоторый текст, используя расширение mcrypt в php.Я создал класс для выполнения этих операций, он отлично работает с другими режимами, но CBC.
Проблема заключается в следующем:
Я использую открытый текст Even in cryptography, silence is golden
.Я делаю часть шифрования, без проблем до этого момента.Но каждый раз, когда я пытаюсь расшифровать, я получаю что-то вроде этого: 9��'t"�cryptography, silence is golden
.Как видите, первые 8 символов текста неверны.Я не знаю, что может быть причиной такого поведения.
Части моего класса, которые обрабатывают эти операции:
public function encrypt($data)
{
$cypher = $this->_getCypher();
$iv = $this->_getIv($cypher);
return trim(base64_encode(mcrypt_encrypt($cypher, self::KEY, $data, MCRYPT_MODE_CBC, $iv)));
}
public function decrypt($data)
{
$cypher = $this->_getCypher();
$iv = $this->_getIv($cypher);
return trim(mcrypt_decrypt($cypher, self::KEY, base64_decode($data), MCRYPT_MODE_CBC, $iv));
}
protected function _getCypher()
{
return self::$_cyphers[$this->_algorithm];
}
protected function _getIv($cypher)
{
return mcrypt_create_iv(mcrypt_get_iv_size($cypher, MCRYPT_MODE_CBC), MCRYPT_RAND);
}
И алгоритм, использованный в приведенном выше примере, является 3DES.Как я уже говорил, при использовании другого режима, например, ECB, все работает нормально.
Есть предложения?