2010-09-25 98 views
2

我正在運行Windows Server 2k8(也許這是問題的一半?)無論如何,我從各種語言的不同Blowfish模塊中獲取不同的值。有沒有可以依賴的標準?哪個Blowfish算法最「正確」?

對於以下示例,假定密鑰爲password和明文12345678

a。 Online Encrypt Tool算法設置爲Blowfish模式ECBBase64 Encode the output檢查給出2mADZkZR0VM=。我一直在使用這個我的參考點,明智或其他。

b。下面的Perl代碼使用Crypt::ECBMIME::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.EXEPKCS#5填充給出2mADZkZR0VOZ5o+S6D3OZw==,這與Crypt :: ECB結果與PADDING_AUTO相同。填充設置爲None我得到2mADZkZR0VM=匹配'a。'

我已經回答了一部分我自己的問題寫這樣的:貌似我只需要修改DI管理的代碼的VB6項目。也許對Crypt :: ECB的作者提出同樣的建議。

但問題依然存在:有沒有值得信賴的河豚參考平臺?

+1

http://www.schneier.com/blowfish.html – pmg 2010-09-25 15:53:55

+0

不夠公平,但所有這些其他聲稱是實現Schneier算法。 – bugmagnet 2010-09-25 16:02:20

+0

相關:http://www.schneierfacts.com/ – NullUserException 2010-09-25 16:19:23

回答

9

您的問題似乎並沒有與他們是否正確實現Blowfish算法。在「無填充」變體中,它們似乎都產生了相同的結果。

這留下了一個8字節輸入是否應該填充的問題。答案很簡單:PKCS#7要求總是至少有一個填充字節添加到輸入中。原因很簡單:在接收端,需要有一個明確的方法來刪除填充。在PKCS#7的情況下,填充字節的值始終是需要由收件人剝離的填充字節數。

所以,當你收到這就是被填充爲PKCS7材料,你解密塊,然後看看在解密輸出的最後一個字節,從塊移除多少字節。如果沒有填充塊,接收者通常會查看實際數據的最後一個字節,並且無論包含哪個字節值,都會去掉那麼多字節(儘管它應該可能告訴您如果數字是大於8)。無論如何,要確保正確的操作,必須至少有一個填充字節。在你的情況下,這意味着輸入擴展到16個字節而不是8個。

+0

沒錯。如果你沒有填充8字節的明文,那麼在解碼方面,你不能分辨7字節明文與填充字節和8字節明文是否相同。確實非常感謝 – caf 2010-09-26 00:18:07

+0

。這非常有意義,並且極大地澄清了事情。絕對是你的大綠剔! – bugmagnet 2010-09-26 10:52:16