私は Windows Server 2k8 を実行しています (おそらくそれが問題の半分でしょうか?) とにかく、さまざまな言語のさまざまな Blowfish モジュールからさまざまな値を取得しています。標準として信頼できるものはありますか?
password
次の例では、キーがで、プレーンテキストが であると想定しています12345678
。
を。アルゴリズムがモードに設定され、チェックされているオンライン暗号化ツールは、 . 私はこれを、賢明かどうかにかかわらず、私の基準点として使用してきました。Blowfish
ECB
Base64 Encode the output
2mADZkZR0VM=
b. 次の Perl コードではCrypt::ECB
、 とMIME::Base64
use MIME::Base64;
use Crypt::ECB;
$crypt = Crypt::ECB->new;
$crypt->padding(PADDING_NONE);
$crypt->cipher('Blowfish') || die $crypt->errstring;
$crypt->key('password');
$enc = $crypt->encrypt("12345678");
print encode_base64($enc);
これ2mADZkZR0VM=
は PADDING_NONE で出力されます (上記の「a.」とよく比較されます)。ただし、パディングが設定されてPADDING_AUTO
いる場合2mADZkZR0VOZ5o+S6D3OZw==
、少なくとも私の考えでは、平文の長さが8文字でパディングが不要なため、これはバグです。
c. Crypt::Blowfish
以下のように使用する場合
#! c:\perl\bin
use Crypt::Blowfish;
use MIME::Base64;
my $key;
my $plaintext;
$key = "password";
$plaintext = "12345678";
my $cipher = new Crypt::Blowfish $key;
my $ciphertext = $cipher->encrypt($plaintext);
my $encoded = encode_base64( $ciphertext );
print $encoded;
次に、2mADZkZR0VM=
「a」に一致するものを取得します。その上。ただし、このモジュールの問題点は、エンコードのために物事を 8 バイトのチャンクに分割する必要があることです。独自のチャンカーはありません。
d. http://linux.die.net/man/3/bf_ecb_encrypt (最近の PHP ext プロジェクトで使用したもの)のソースを使用すると、'a.' と同じ答えが得られます。SSLeay と OpenSSL で使用されているため、このコードを最も信頼する傾向があります。
e. BlowfishEx.EXE
DI 管理のBlowfish :パディング付きの Visual Basic バージョンは、Crypt::ECB の結果と同じものを提供します。Padding を に設定すると、「a.」に一致するものを取得できます。PKCS#5
2mADZkZR0VOZ5o+S6D3OZw==
PADDING_AUTO
None
2mADZkZR0VM=
私はこれを書いて私自身の質問に部分的に答えました.VB6プロジェクトのDI管理のコードを変更する必要があるようです. Crypt::ECB の作成者に同じことを提案するかもしれません。
しかし、疑問が残ります。信頼できるフグのリファレンス プラットフォームはありますか?