是否有支持48位數據塊的Blowfish算法的實現(Java/C++/Ruby)?我有一個加密問題,輸入和輸出通道正好是48位。網上的所有實現都適用於64位塊。48位blowfish
回答
這是因爲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))
你可以使用與河豚。請記住,永遠不要重用任何反擊價值。
只需選擇一個計數器(它將需要在所有加密中使用相同的密鑰是唯一的),將計數器填充到64位並加密填充的計數器。然後將這個加密的前48位與你的明文進行XOR以獲得密文。重複密文操作進行解密。
唯一的問題是找到合適的計數器。如果將它與密文一起包含,則需要超過48位。也許你有一個會話ID或可以使用的東西?
塊大小和模式是非常不同的。使用計數器模式不會解決問題。 – rook 2009-12-17 01:40:58
當然會。 Counter-mode將河豚轉換爲流密碼,因此您可以將流的第一個48位和xor與純文本相結合以獲得密文(就像您使用RC4-drop所做的那樣)在你的回答中)。 – 2009-12-17 06:32:24
我建議使用RC4-drop 1024.RC4是一種流密碼,因此如果消息少於48bytes,則可以加密任意大小,然後可以用空值填充。丟棄1024意味着丟棄PRNG流的前1024個字節,爲此,您可以在首次使用時加密1024個字節的垃圾。
BitTorrent的消息流加密使用RC4降1024,這裏是使用ARC4庫Python實現:
- 1. Javascript中的48位按位運算?
- 2. 48位和28位ATA命令與ioctl
- 3. SVGPathData鉻鍍鉻48 48
- 4. Blowfish和Blowfish-compat有什麼區別?
- 5. 什麼的typedef使用48位瓦爾
- 6. Blowfish objective-c implementation
- 7. Java和Javascript Blowfish
- 8. 用blowfish加密
- 9. PHP Blowfish加密
- 10. 使用JAI讀取48位PPM(PNM)並保存爲24位jpeg
- 11. 將48位密鑰散列成16位值
- 12. 如何爲位掩碼創建48位uint
- 13. 如何將64位散列值縮短爲48位值?
- 14. C中的Blowfish php?
- 15. MSSQL:從MD5到Blowfish
- 16. Blowfish Algo For a Image
- 17. Blowfish C例子char *
- 18. 數學解:48
- 19. Blowfish密碼 - 按位異或與P數組的密鑰
- 20. 精度拖放48
- 21. C#中的Blowfish來自Java
- 22. 如何循環Blowfish加密++
- 23. Blowfish無效長度例外
- 24. 在android中的Blowfish加密
- 25. 使用Blowfish與PHP加密
- 26. C++ Blowfish散列實現
- 27. 使用blowfish加密與Android?
- 28. PHP Blowfish文件丟失?
- 29. Blowfish加密函數(BF_encrypt)C
- 30. C++的標準blowfish API?
與添加額外的字節是生成的加密數據塊將是64位的唯一問題。我不能截斷它,而且這比我的數據通道可以支持的更多。 – 2009-12-07 12:43:31
我從來沒有聽說過48位塊密碼。我知道有32位,但這對你也沒有幫助。是否有可能拆分64位塊並將其作爲2x48位發送? – 2009-12-07 15:00:48