首页 文章

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

提问于
浏览
0

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

  • 生成会话密钥

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

  • 使用会话密钥加密文件

反求解密 .

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

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

2 回答

  • 0

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

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

  • 0

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

    您可能还会检查您的密文在前面没有添加内容,例如Nonce . 这将具有延长密文的相同效果 .

    正如已经指出的,Blowfish不是一个好选择 . 使用AES代替,或者您想要一个实际的流密码中的一个eSTREAM密码 .

相关问题