我正在用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);
答案 0 :(得分:1)
Blowfish是一种古老且相对着名的密码。我很难相信PHP没有某种类型的模块,所以我用谷歌搜索它,这是第一件事:
PHP不是我的专长,但这似乎是你正在寻找的。它支持Blowfish,并且有用于设置CBC等的标志。
正如我所理解的那样,加密功能是你不应该试图“滚动你自己”的东西,“你”包含你,我和99.9%的每个人。