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