Я переписываю веб-приложение 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);