Я пытаюсь передать данные между приложениями, которые были зашифрованы с использованием Horde/phpmyadmin blowfish.php library, вместо этого вместо этого используется mcrypt
. Если я что-то вроде:Substitute Horde/phpmyadmin blowfish.php для mcrypt
$key = "qwerty";
$data = "12345678";
$pma_cipher = new Horde_Cipher_blowfish;
print base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC));
print PMA_blowfish_encrypt($data, $key);
print base64_encode($pma_cipher->encryptBlock($data, $key));
print base64_encode($pma_cipher->encryptBlock($data, $key));
Выход
pC+XbHWnqIg= // mcrypt
pC+XbHWnqIg= // PMA blowfish
pC+XbHWnqIg= // OK
WwkIWeYzlHw= // next block is different
Кроме того, если изменить данные:
$key = "qwerty";
$data = "123456789";
$pma_cipher = new Horde_Cipher_blowfish;
print base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC));
print PMA_blowfish_encrypt($data, $key);
теперь я получаю:
pC+XbHWnqIjaCTiQlKkXRQ==
pC+XbHWnqIg99GXjyWLMmA==
It кажется, что версия Орды/ПМА меняет ключ каждый блок.
Есть ли способ настроить вызовы mcrypt, чтобы сделать две библиотеки кросс-совместимыми, или я должен просто выбрать один или другой и соответствующим образом скорректировать ситуацию?
Я пытаюсь быть совместимым с кодом, который указывает ключ для каждого блока из 8 байтов - могу ли я обработать ключ с помощью функций mcrypt? – Andrew
Не совсем. Вы можете выполнить ручное микширование вручную (путем копирования источника функции из Horde_Cipher_blowfish) или вы можете повторно инициализировать '$ pma_cipher' перед выполнением каждого вызова' encryptBlock() '. – mjec