Использование Crypt :: CBC и Blowfish_PP с PHP - PullRequest
0 голосов
/ 06 января 2012

Я переписываю веб-приложение Perl на PHP, но проблема, с которой я сталкиваюсь, заключается в том, что некоторые данные в базе данных MySQL зашифрованы с использованием Blowfish_PP / CBC в Perl.Казалось, я не могу найти реализацию этого в PHP, поэтому я начал переписывать часть кода на PHP.

Я довольно близко подхожу, но у меня возникли небольшие проблемы с некоторыми преобразованиями регулярных выражений.,А именно:

my ($salt) = $$input_stream =~ /^Salted__(.{8})/s;

Где $ input_stream - это зашифрованные данные после распаковки:

Salted__�/kW��t�}��`�

Я не уверен, как написать это регулярное выражение в PHP, поэтому любая помощь будет принята,Я также включил полный код, с которым я работаю, в PHP ниже, если у кого-то есть другие идеи.Это еще не все, так как я застрял на регулярном выражении выше.

 $pass = "VGhlIHRhZHBvbGUgc251ZmZzIGEgY2FuZGxlLiBUaGUgZ29sZGZpc2ggaG93bHMgYXQgbWlkbmlnaHQu";
 $pass = base64_decode($pass);

 $ciphertext = "53616c7465645f5fff2f6b57dcf974857dd7e5010b60eea";
 $ciphertext = pack('H*',$ciphertext);

 // Here's what I did with the regex, but pretty sure this is wrong.
 $c2 = preg_split('/^Salted__(.{8})/s',$ciphertext);
 $salt = $c2[1];

 $ciphertext = substr($ciphertext,16,strlen($ciphertext));

 $desired_len = 64; (should be keylen + ivlen, but this works)
 $data = "";
 $d = '';

 while (strlen($data) < $desired_len) {
   $d = md5($d . $pass . $salt);
   $data .= $d;
 }

 $key = substr($data,0,56);
 $iv = substr($data,56,8);

1 Ответ

1 голос
/ 06 января 2012

Blowfish - старый и относительно известный шифр.Мне было трудно поверить, что в PHP не было какого-то модуля для него, поэтому я нашел его в гугле, и это было первое, что появилось:

mcrypt_encrypt

PHP не моя специальность, но это то, что вы ищете.Он поддерживает Blowfish и есть флаги для настройки CBC и т. Д.

Как я понимаю, крипто-функции - это та вещь, для которой вы никогда не должны пытаться «свернуть свои собственные», где «вы» охватывает вас., я и 99,9% всех.

...