使用Crypt :: CBC和Blowfish_PP与PHP

时间:2012-01-06 13:41:02

标签: 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下面使用的完整代码。它尚未完成,因为我坚持上面的正则表达式。

 $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 个答案:

答案 0 :(得分:1)

Blowfish是一种古老且相对着名的密码。我很难相信PHP没有某种类型的模块,所以我用谷歌搜索它,这是第一件事:

mcrypt_encrypt

PHP不是我的专长,但这似乎是你正在寻找的。它支持Blowfish,并且有用于设置CBC等的标志。

正如我所理解的那样,加密功能是你不应该试图“滚动你自己”的东西,“你”包含你,我和99.9%的每个人。