Как расшифровать алгоритм Blowfish в php?

Я должен написать PHP-скрипт для дешифрования зашифрованных данных Blowfish.

Данные, которые я получаю для дешифрования, зашифровываются другим приложением (у меня нет доступа к нему).

Данные дешифруют отлично, когда я проверяю его, используя скрипт javascript (blowfish.js).

Как я могу расшифровать данные в php?

Я пробовал функцию mcrypt в PHP. Код работает отлично, если я шифрую и дешифруя с использованием того же кода. Если я дешифрую зашифрованный код (в другом приложении), он дает мусор.

Не знаю, какой режим установить.

Может ли кто-нибудь предложить код ниже или любой код PHP BlowFish без использования mcrypt?

 <?php class Encryption { static $cypher = 'blowfish'; static $mode = 'cfb'; static $key = '12345678'; public function encrypt($plaintext) { $td = mcrypt_module_open(self::$cypher, '', self::$mode, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, self::$key, $iv); $crypttext = mcrypt_generic($td, $plaintext); mcrypt_generic_deinit($td); return $iv.$crypttext; } public function decrypt($crypttext) { $plaintext = ""; $td = mcrypt_module_open(self::$cypher, '', self::$mode, ''); $ivsize = mcrypt_enc_get_iv_size($td); $iv = substr($crypttext, 0, $ivsize); $crypttext = substr($crypttext, $ivsize); if ($iv) { mcrypt_generic_init($td, self::$key, $iv); $plaintext = mdecrypt_generic($td, $crypttext); } return $plaintext; } } $encrypted_text = Encryption::encrypt('this text is unencrypted'); echo "ENCRY=".$encrypted_text;echo "<br/>"; ////I am using this part(decryption) coz data already encryption // Encrypted text from app $encrypted_text = '29636E7ADA7081E7F5D73121C45E20D5'; // Decrypt text $decrypted_text = Encryption::decrypt($encrypted_text); echo "ENCRY=".$decrypted_text;echo "<br/>"; ?> 

$iv вы используете при расшифровке, должен быть таким же, как и Инициализирующий вектор, используемый при шифровании данных. Ваши собственные функции передают эту информацию, добавив IV в зашифрованный текст ( return $iv.$crypttext; ), но другое приложение может этого не сделать.

Вам нужно узнать, что IV использует другое приложение, и передать это на свой собственный код. Так как функция decrypt считывает IV с начала зашифрованного текста, вы можете просто добавить его.

Кроме того, вы можете протестировать бит, зашифровав один и тот же текст с помощью функции encrypt и с другим приложением. Если выходы не имеют одинаковой длины (ваш собственный больше), то приложение не включает внутри внутри шифрованного текста IV, и вы должны получить эту информацию другим способом.

И, конечно, используемый режим шифрования (CFB) должен быть одинаковым между вашим кодом и другим приложением.

Здесь есть приятное и простое решение:

http://www.codewalkers.com: Шифрование и расшифровка с использованием Blowfish

Существует библиотека PEAR для создания encyptions blowfish, которые позволяют вам выбирать погоду для использования MCRYPT Libs или просто собственный PHP:

вы можете просмотреть библиотеку здесь: Crypt_Blowfish 1.1.0RC2

Выберите файл PHP.php, который покажет вам исходный код, чтобы сделать это жестко закодированным в родном PHP.