2012-01-06 8 views
0

私はPHPでPerl Webアプリケーションを書き直していますが、MySQLデータベースの一部のデータはBlowfish_PP/CBC Perlで暗号化されています。私はPHPでその実装を見つけることができなかったので、私はPHPでコードのいくつかを書き直し始めました。PHPでCrypt :: CBCとBlowfish_PPを使用する

かなり近づいていますが、一部の正規表現の変換に少し問題があります。すなわち:

$のinput_streamが展開された後に暗号化されたデータである
my ($salt) = $$input_stream =~ /^Salted__(.{8})/s; 

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

ブローフィッシュは、比較的よく知られている暗号です。私はそれはので、私はそれをGoogleで検索するために、いくつかの種類のモジュールを持っていなかったPHPを信じて苦労したし、これが出てくる最初のものだった:

mcrypt_encrypt

PHPは私の専門ではありませんが、これはに表示されますあなたが探しているものになります。それはBlowfishをサポートし、CBCなどを設定するためのフラグがあります。

私の理解ではありますが、そして皆の99.9%。

関連する問題