Так как mcrypt считается устаревшим, моя задача заключается в обновлении текущего кода для использования openssl. Звучит просто, но... после нескольких дней попыток и неудач я чувствую себя безумным.
Мой вопрос к вам: есть ли способ, которым вы можете расшифровать данные openssl, ранее зашифрованные с помощью mcrypt? Я прочитал столько сообщений по этому вопросу, и большинство из них говорит, что предыдущее заполнение данных вручную было/необходимо, прежде чем запускать mcrypt на нем. Проблема заключается в том, что данные mcrypt-ed уже зашифрованы (с автоматическим заполнением нулевого заполнения mcrypt) и находятся в базе данных, поэтому изменение этого невозможно и/или желательно.
Упоминания:
- используется алгоритм rijndael-128 cbc с 32-байтным ключом (поэтому я использую aes-256-cbc для openssl).
- Я использую оболочку openssl для php (php-crypto).
- Мне удалось выполнить обратную операцию (декодировать openssl с помощью mcrypt), просто удалив конечные декодированные символы, если они не являются альфа-числами.
- Вручную заполнять данные до mcrypt-ing, а затем расшифровывать их с помощью openssl работает как шарм, но это не проблема.
Некоторые фрагменты кода:
// Simple mcrypt encrypt, decrypt with php-crypto example
// This doesn't work and produces a "Finalizing of cipher failed" error
$data = "This is a text";
$strMcryptData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
$algorithm = 'aes-256-cbc';
$cipher = new Cipher($algorithm);
$sim_text = $cipher->decrypt($strMcryptData, $key, $iv);
// Simple mcrypt encrypt with padding, decrypt with php-crypto
// Works and produces the correct text on decryption
$pad = $blocksize - (strlen($data) % $blocksize);
$text = $data;
$text .= str_repeat(chr($pad), $pad);
$strPaddedData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
$sim_text = $cipher->decrypt($strPaddedData, $key, $iv);