从解密文件中删除多余的字节

时间:2016-05-10 13:55:33

标签: java encryption cryptography blowfish

我正在使用Blowfish java加密而没有填充来按顺序加密文件:

  • 生成会话密钥
  • 准备文件头(算法,密钥长度,模式,使用rsa公钥加密的会话密钥)
  • 使用会话密钥加密文件

反向解密。

我以解密文件结束,文件大小=原始文件大小+一些额外字节(数量取决于原始文件大小,块大小等)。 我怎样才能使解密的文件大小=原始。显然我必须减少额外的字节数,但是如何在不了解原始文件大小的情况下识别其中有多少字节。

编辑。我正在使用流密码。没有Padding和Blowfish是必须的,因为它是一个学校项目。

2 个答案:

答案 0 :(得分:0)

Blowfish是分组密码,因此它会压缩块。它的块大小是64位。如果您尝试加密65位(无论您是否明确选择了填充),加密大小将为128位。

如果您希望加密文本为65位,则必须使用流密码。

答案 1 :(得分:0)

为避免使用像Blowfish这样的块密码进行填充,请使用计数器模式(CTR)。这有效地将块密码转换为流密码。您只需丢弃生成的字节流的最后一部分,而不是填充,因此您的密文与原始明文的长度相同。

您可能还会检查您的密文是否在前面添加了一些内容,例如Nonce。这与延长密文的效果相同。

正如已经指出的,Blowfish不是一个好选择。请改用AES,或者您需要一个eSTREAM个密码来获得实际的流密码。