48位河豚

时间:2009-12-07 12:00:37

标签: encryption cryptography blowfish

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

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分:2)

您可以将counter-mode与河豚一起使用。记住永远不要重复使用任何反价值。

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

唯一的问题是找到合适的柜台。如果将其包含在密文中,则需要48位以上。也许您有会话ID或可以使用的东西?

答案 2 :(得分:1)

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

BitTorrent的消息流加密使用RC4-drop 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