我正在運行Windows Server 2k8(也許這是問題的一半?)無論如何,我從各種語言的不同Blowfish模塊中獲取不同的值。有沒有可以依賴的標準?哪個Blowfish算法最「正確」?
對於以下示例,假定密鑰爲password
和明文12345678
。
a。 Online Encrypt Tool算法設置爲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(其與比較好 '一'。上文)。但是,當填充設置爲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=
它匹配「一個。」以上。但是,這個模塊的問題在於,必須將事物分成8個字節的塊進行編碼;它沒有自己的笨蛋。 d)。如果我使用http://linux.die.net/man/3/bf_ecb_encrypt(我爲最近的PHP ext項目所做的)源代碼,那麼我會得到與'a。'相同的答案。我傾向於最信任這些代碼,因爲它在SSLeay和OpenSSL中使用。
e。 DI管理局Blowfish: a Visual Basic version中的BlowfishEx.EXE
與PKCS#5
填充給出2mADZkZR0VOZ5o+S6D3OZw==
,這與Crypt :: ECB結果與PADDING_AUTO
相同。填充設置爲None
我得到2mADZkZR0VM=
匹配'a。'
我已經回答了一部分我自己的問題寫這樣的:貌似我只需要修改DI管理的代碼的VB6項目。也許對Crypt :: ECB的作者提出同樣的建議。
但問題依然存在:有沒有值得信賴的河豚參考平臺?
http://www.schneier.com/blowfish.html – pmg 2010-09-25 15:53:55
不夠公平,但所有這些其他聲稱是實現Schneier算法。 – bugmagnet 2010-09-25 16:02:20
相關:http://www.schneierfacts.com/ – NullUserException 2010-09-25 16:19:23