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