我正在使用无填充的blowfish java加密按顺序加密文件:
生成会话密钥
准备文件头(算法、密钥长度、模式、使用rsa公钥加密的会话密钥)
使用会话密钥加密文件
反向解密。
我以大小=原始文件大小+一些额外字节(数量取决于原始文件大小、块大小等)的解密文件结束。如何使解密文件的大小=原始。显然,我必须削减额外的字节,但我如何才能认识到其中有多少不知道原始文件的大小。
编辑。我正在使用流密码。没有填料和河豚是必须的,因为这是一个学校的项目。
我正在使用无填充的blowfish java加密按顺序加密文件:
生成会话密钥
准备文件头(算法、密钥长度、模式、使用rsa公钥加密的会话密钥)
使用会话密钥加密文件
反向解密。
我以大小=原始文件大小+一些额外字节(数量取决于原始文件大小、块大小等)的解密文件结束。如何使解密文件的大小=原始。显然,我必须削减额外的字节,但我如何才能认识到其中有多少不知道原始文件的大小。
编辑。我正在使用流密码。没有填料和河豚是必须的,因为这是一个学校的项目。
2条答案
按热度按时间cwxwcias1#
为了避免像河豚一样使用块密码填充,请使用计数器模式(ctr)。这有效地将块密码转换为流密码。您只需丢弃生成的bytestream的最后一部分,而不是填充,这样您的cyphertext与原始明文的长度相同。
您还可以检查您的cyphertext没有在前面添加内容,比如nonce。这将产生与延长密码文本相同的效果。
正如已经指出的,河豚不是一个好的选择。改用aes,或者其中一个estream密码是您想要的实际流密码。
gwo2fgha2#
blowfish是块密码,所以它压缩块。它的块大小是64位。如果尝试加密65位(无论是否显式选择填充),加密大小将为128位。
如果你想加密的文本是65位,你必须使用流密码。