2009-12-07 33 views
1

是否有支持48位數據塊的Blowfish算法的實現(Java/C++/Ruby)?我有一個加密問題,輸入和輸出通道正好是48位。網上的所有實現都適用於64位塊。48位blowfish

回答

3

這是因爲Blowfish具有64位的設置塊大小。您可以將兩個隨機字節填充到數據的末尾。

require 'rubygems' 
require 'crypt/blowfish' 
blowfish = Crypt::Blowfish.new("A key up to 56 bytes long") 
plain="123456" 
encryptedBlock = blowfish.encrypt_block(plain+(rand(250)+5).chr+(rand(250)+5).chr) 

,或者如果你plain可能小於6個字節/ 48位

encryptedBlock = blowfish.encrypt_block(plain.ljust(8)) 
+0

與添加額外的字節是生成的加密數據塊將是64位的唯一問題。我不能截斷它,而且這比我的數據通道可以支持的更多。 – 2009-12-07 12:43:31

+0

我從來沒有聽說過48位塊密碼。我知道有32位,但這對你也沒有幫助。是否有可能拆分64位塊並將其作爲2x48位發送? – 2009-12-07 15:00:48

2

你可以使用​​與河豚。請記住,永遠不要重用任何反擊價值。

只需選擇一個計數器(它將需要在所有加密中使用相同的密鑰是唯一的),將計數器填充到64位並加密填充的計數器。然後將這個加密的前48位與你的明文進行XOR以獲得密文。重複密文操作進行解密。

唯一的問題是找到合適的計數器。如果將它與密文一起包含,則需要超過48位。也許你有一個會話ID或可以使用的東西?

+0

塊大小和模式是非常不同的。使用計數器模式不會解決問題。 – rook 2009-12-17 01:40:58

+1

當然會。 Counter-mode將河豚轉換爲流密碼,因此您可以將流的第一個48位和xor與純文本相結合以獲得密文(就像您使用RC4-drop所做的那樣)在你的回答中)。 – 2009-12-17 06:32:24

1

我建議使用RC4-drop 1024.RC4是一種流密碼,因此如果消息少於48bytes,則可以加密任意大小,然後可以用空值填充。丟棄1024意味着丟棄PRNG流的前1024個字節,爲此,您可以在首次使用時加密1024個字節的垃圾。

BitTorrent的消息流加密使用RC4降1024,這裏是使用ARC4庫Python實現:

http://google.com/codesearch/p?hl=en#4FSOSMZ6Pxc/distfiles/BitTorrent-5.0.7.tar.gz|eyN-AXYL_0E/BitTorrent-5.0.7/BitTorrent/Connector.py&q=lang:python%20%22ARC4.new%22