我正在使用Blowfish java加密而没有填充来按顺序加密文件:
反向解密。
我以解密文件结束,文件大小=原始文件大小+一些额外字节(数量取决于原始文件大小,块大小等)。 我怎样才能使解密的文件大小=原始。显然我必须减少额外的字节数,但是如何在不了解原始文件大小的情况下识别其中有多少字节。
编辑。我正在使用流密码。没有Padding和Blowfish是必须的,因为它是一个学校项目。
答案 0 :(得分:0)
Blowfish是分组密码,因此它会压缩块。它的块大小是64位。如果您尝试加密65位(无论您是否明确选择了填充),加密大小将为128位。
如果您希望加密文本为65位,则必须使用流密码。
答案 1 :(得分:0)
为避免使用像Blowfish这样的块密码进行填充,请使用计数器模式(CTR)。这有效地将块密码转换为流密码。您只需丢弃生成的字节流的最后一部分,而不是填充,因此您的密文与原始明文的长度相同。
您可能还会检查您的密文是否在前面添加了一些内容,例如Nonce。这与延长密文的效果相同。
正如已经指出的,Blowfish不是一个好选择。请改用AES,或者您需要一个eSTREAM个密码来获得实际的流密码。