1

Blowfish暗号化を実行しようとしていますが、C#で暗号化されたコードが同じではないために復号化されます。私はC#でこのライブラリを使用しました: https ://defuse.ca/source/blowfish.cs そして暗号化するためにこの自作のコード:

$td = MCRYPT_BLOWFISH;
$iv_size = mcrypt_get_iv_size($td, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

echo "Original data: $data<br />"; 

$encrypted_data = mcrypt_encrypt($td, $blowfish_key, $dec, MCRYPT_MODE_CBC, $iv);

echo "Encrypted data: " . bin2hex($encrypted_data)  . "<br />";
$x ="1e9a532f6391071e04ac46dfd4ffa1e324665ef7f1e75b8c2ea6ebabd75fd04d8"; //result from C#
$data = mcrypt_decrypt($td, $blowfish_key, $x /*$encrypted_data*/, MCRYPT_MODE_CBC, $iv);

echo trim($data); 

誰かがこの問題で私を助けることができますか?前もって感謝します。CH

4

1 に答える 1

4

PHPコードには2つの問題があります。

最初:mcryptはバイナリデータを期待します... 16進エンコードされたバイトの文字列はありません...(hex2bin()またはpack()はそれを変換します)

2番目:IV ...あなたのblowfish.csはあなたのためにランダムなIVを生成し、それを暗号文の前に置きます...あなたのphpコードは復号化には機能しない新しいランダムなIVを生成します

提案:

c#

var fish = new BlowFish("0000000000000000");
var cs_output=fish.Encrypt_CBC("This is a test of the blowfish.cs file");

php

$cs_output="27c7c634ead1d28bfe64821a28ef909311e1f655150f24eec27abff1376a7a8712e7962fdbb0150bfc0882078cb99e67";

$iv=pack("H*" , substr($cs_output,0,16));
$blowfish_key=pack("H*" , "0000000000000000"); // key in this example is all zero
$x =pack("H*" , substr($cs_output,16)); 
$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $blowfish_key, $x , MCRYPT_MODE_CBC, $iv);
于 2012-11-16T18:27:24.443 に答える