1

是否有支持 48 位数据块的 Blowfish 算法的实现(Java/C++/Ruby)?我有一个加密问题,输入和输出通道正好是 48 位。网络上的所有实现都是针对 64 位块的。

4

3 回答 3

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))
于 2009-12-07T12:10:45.360 回答
2

您可以对河豚使用反模式。只要记住永远不要重用任何反价值。

只需选择一个计数器(它需要在使用相同密钥的所有加密中唯一),将计数器填充到 64 位并加密填充的计数器。然后将加密的前 48 位与您的明文进行异或运算,以获得密文。对密文重复该操作即可解密。

唯一的问题是找到一个合适的柜台。如果将其包含在密文中,则需要超过 48 位。也许你有一个 session-id 或者你可以使用的东西?

于 2009-12-07T17:15:49.220 回答
1

我建议使用 RC4-drop 1024。RC4 是一种流密码,因此您可以加密任意大小,如果消息小于 48 字节,则可以用空值填充它。丢弃 1024 意味着您丢弃了 PRNG 流的前 1024 个字节,为此您可以在第一次使用它时加密 1024 个字节的垃圾。

BitTorrent 的消息流加密使用 RC4-drop 1024,这是一个使用 ARC4 库的 python 实现:

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

于 2009-12-17T01:48:23.853 回答