在PHP中使用Crypt::CBC和Blowfish_PP

在PHP中使用Crypt::CBC和Blowfish_PP,php,perl,encryption,blowfish,Php,Perl,Encryption,Blowfish,我正在用PHP重写一个Perl web应用程序,但遇到的问题是MySQL数据库中的一些数据是用Perl中的Blowfish_PP/CBC加密的。我似乎无法在PHP中找到它的实现,所以我开始用PHP重新编写一些代码 我已经很接近了,但是在一些正则表达式转换上有点麻烦。即: my ($salt) = $$input_stream =~ /^Salted__(.{8})/s; 其中$input_stream是解包后的加密数据: Salted__�/kW��t�}��`� 我不知道如何用PHP编写这

我正在用PHP重写一个Perl web应用程序,但遇到的问题是MySQL数据库中的一些数据是用Perl中的Blowfish_PP/CBC加密的。我似乎无法在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);
$pass=“vghlihrhzhbvbgugc251zmigegy2fuzzgxllibuagugz29szgzpc2ggag93bhmgyxqgbwlkbmlnahqu”;
$pass=base64_解码($pass);
$ciphertext=“53616c7465645f5fff2f6b57dcf974857dd7e5010b60eea”;
$ciphertext=pack('H*',$ciphertext);
//这是我用正则表达式做的,但很确定这是错的。
$c2=preg_split('/^Salted_(.{8})/s',$ciphertext);
$salt=$c2[1];
$ciphertext=substr($ciphertext,16,strlen($ciphertext));
$desired_len=64;(应为keylen+ivlen,但此选项有效)
$data=“”;
$d='';
while(strlen($data)<$desired\u len){
$d=md5($d.$pass.$salt);
$data.=$d;
}
$key=substr($data,0,56);
$iv=子项($56,8);

河豚是一种古老且相对著名的密码。我很难相信PHP没有某种模块,所以我在谷歌上搜索了一下,这是第一个想到的:

PHP不是我的专长,但这似乎正是您想要的。它支持河豚,并且有用于设置CBC等的标志

据我所知,加密函数是一种你永远不应该尝试“自己滚”的东西,“你”包括你、我和99.9%的人