加密解密文件时如何处理文件结尾?

elated 2011-05-04 10:52:08
一种加密算法,要求输入64位明文。用这个算法加密文件。文件大小可能不一定是八字节(64位)的整数倍。这时,把不足64位的尾部填为0,填满64位后作为明文加密。

但我解密时,问题就来了。那些多填充进去的0怎么去掉呢?怎么知道它是被我后添充进去的,而不是原来文件中就存在的呢?谁能保证原来的文件结尾不是一堆0?

有什么好的设计方法可以解决这种问题么?不知道我把问题描述清楚没有。
...全文
245 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
baggiowangyu 2011-05-11
  • 打赏
  • 举报
回复
1. 记录加密前后明文、密文的长度
2. 将长度附加到密文尾部,补足位数
3. 解密前先读取密文长度,用该长度来截断
4. 解密后再用明文长度截断,得到原始明文
Meteor_Code 2011-05-10
  • 打赏
  • 举报
回复
补0,一般是这个做法,同时也要将补的字节数加进去
比如,你需要补6个字节,你就补5个0和一个字节6,解码的时候看最后一个字节来决定去掉几个字节
如果你的明文正好8字节对齐,你就补7个0一个字节的8
elated 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 a070104020016 的回复:]
请问你做的是数字签名吗
[/Quote]
不是
a070104020016 2011-05-09
  • 打赏
  • 举报
回复
请问你做的是数字签名吗
elated 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 aiwnx 的回复:]
是数据流的对称式加密吗?楼主的问题具有一定普遍性。这个问题和加密算法本身无关,而需要一些额外的工作。比如在加密函数的参数中增加原始数据的大小及加密后的数据大小等等。或者规定填充字节满足一定特点也可以。
[/Quote]
对称加密
qq120848369 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]

使用一个特定结构体保存与加密相关的各种信息,包含文件长度。
然后写在加密文件的最后面。
解密时先读出这个结构体中的内容,再处理。
[/Quote]

文件读写不能精确到位,最多到字节。

就算你最后一个字节用了2位,其他都是0,那一个字节你也要一起取走。

所以,记录一下你的文件一共有多少位就可以了。

只要读的字节数已经足够位数了,就停下,然后由程序分析最后一个字节里哪些位是没用的。

再就是Loaden说的,在文件末尾写入一个int记录一下有多少位,一个int固定4个字节,你读文件前定位到文件

末尾,然后前移4字节,然后读一下就知道文件有n位了,n/8向上取整就是要从文件开头读多少个字节了。

n/8向上取整就是如果n%8!=0,结果则是(n/8)+1,否则是n/8.
aiwnx 2011-05-05
  • 打赏
  • 举报
回复
是数据流的对称式加密吗?楼主的问题具有一定普遍性。这个问题和加密算法本身无关,而需要一些额外的工作。比如在加密函数的参数中增加原始数据的大小及加密后的数据大小等等。或者规定填充字节满足一定特点也可以。
luciferisnotsatan 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hnuqinhuan 的回复:]

这个属于密码学的知识 你确定每一块 然后再在最后面专门用一块(64位或者128位 64的整数倍)来记录你的长度 就是有多少位
[/Quote]
++
「已注销」 2011-05-05
  • 打赏
  • 举报
回复
使用一个特定结构体保存与加密相关的各种信息,包含文件长度。
然后写在加密文件的最后面。
解密时先读出这个结构体中的内容,再处理。
無_1024 2011-05-04
  • 打赏
  • 举报
回复
这个属于密码学的知识 你确定每一块 然后再在最后面专门用一块(64位或者128位 64的整数倍)来记录你的长度 就是有多少位

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧