免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6024 | 回复: 20
打印 上一主题 下一主题

如何计算这样一类文件的md5 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-10 19:23 |只看该作者 |倒序浏览
一般文件的md5编码很简单,照着算法做或md5sum就可以。
问题是我们现在需要在文件本身里写入这个文件的md5信息,而不是用外部文件来表达,举例来说,有一个文本文件,我们在最后告诉读者这个文件的md5为xxxxxxxxxxxx,而你通过md5sum计算这个文件的时候恰好是文件内容中的md5编码。
还有一例,比如制作了电影文件到后期处理,需要添加字幕显示当前电影文件的md5码以便观众确认这个版本的文件是正版,这个字幕本身包含了md5信息,只是表现方式是图形方式。

问题是这样的md5可不可以通过某种方式被计算得到?

论坛徽章:
0
2 [报告]
发表于 2006-06-11 01:14 |只看该作者
参考 TCP header 计算 checksum 的办法。预先在文件中留空白串("\0\0\0\0..." 足够写入整个 MD5 结果为准),计算 MD5SUM,然后把结果写入预留空间。进行检验的时候,把这个部分的内容置 '\0' 计算,然后再与包含的结果进行比较。

论坛徽章:
0
3 [报告]
发表于 2006-06-11 13:22 |只看该作者
原帖由 wolf0403 于 2006-6-11 01:14 发表
参考 TCP header 计算 checksum 的办法。预先在文件中留空白串("\0\0\0\0..." 足够写入整个 MD5 结果为准),计算 MD5SUM,然后把结果写入预留空间。进行检验的时候,把这个部分的内容置 '\0' 计算,然 ...


checksum是可以累加的,你可以留白后期再算,md5似乎不能这么做,不知道你是否了解md5的计算方式,它本质上是个hash码。

一个最简单的例子是:
建立一个新文件,在文件中写下一个md5码并保存,并用md5算法来计算这个字符串得到的结果就是原来这个串,用公式来表达就是:

md5(stringA)=stringA  ----------1

当有其他文本时公式变成
md5(stringB+stringA)=stringA   --------2

对于1式请给出一个或多个解stringA
对于2式,已知stringB,要求一个满足条件的stringA

问题是方程是非线性的md5算法不是checksum算法,所以要求这个方程好像比较难哦,我没有找到方法,所以来问,但感觉楼上的说法不对,似乎不那么简单。

论坛徽章:
0
4 [报告]
发表于 2006-06-12 13:48 |只看该作者
如果有这种方法,做出来一定要通知我!
我将不远万里赶来膜拜!

论坛徽章:
0
5 [报告]
发表于 2006-06-12 14:22 |只看该作者
原帖由 liubinbj 于 2006-6-11 13:22 发表


checksum是可以累加的,你可以留白后期再算,md5似乎不能这么做,不知道你是否了解md5的计算方式,它本质上是个hash码。

一个最简单的例子是:
建立一个新文件,在文件中写下一个md5码并保存,并用md5算法 ...


你没看懂2楼的意思, 仔细读10遍,如果再想不出来,别做了。

论坛徽章:
0
6 [报告]
发表于 2006-06-12 16:04 |只看该作者
不用吧,再读一篇还理解不了的话建议 lz 改行算了...


我开玩笑的。


PS: 如果 lz 真能在电影的字幕(存在电影文件里的字幕,不是通过字幕文件附加的)里放上 md5 码,那建议 lz 马上入美国国籍,今年的图灵奖肯定是你的了...


还是开玩笑的,别介意...

论坛徽章:
0
7 [报告]
发表于 2006-06-12 23:58 |只看该作者
原帖由 yulc 于 2006-6-12 13:48 发表
如果有这种方法,做出来一定要通知我!
我将不远万里赶来膜拜!


我感觉我做不出来,我遗憾不能受到你的膜拜。

论坛徽章:
0
8 [报告]
发表于 2006-06-13 00:01 |只看该作者
原帖由 isjfk 于 2006-6-12 16:04 发表
不用吧,再读一篇还理解不了的话建议 lz 改行算了...


我开玩笑的。


PS: 如果 lz 真能在电影的字幕(存在电影文件里的字幕,不是通过字幕文件附加的)里放上 md5 码,那建议 lz 马上入美国国籍,今年的图 ...


再读了一遍,理解了他的意思,他给的方法不包含编码自身的编码。和我需要的不一致。

不知道是否有谁证明过不存在一个多项式算法能计算这个问题
即解方程:
md5(x)=x
或者方程
md5(const+x)=x

有谁证明过方法不存在呢?

[ 本帖最后由 liubinbj 于 2006-6-13 00:06 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2006-06-13 08:07 |只看该作者
原帖由 liubinbj 于 2006-6-13 00:01 发表


再读了一遍,理解了他的意思,他给的方法不包含编码自身的编码。和我需要的不一致。

不知道是否有谁证明过不存在一个多项式算法能计算这个问题
即解方程:
md5(x)=x
或者方程
md5(const+x)=x

有谁证 ...

这个问题不是
如何解方程
md5(data+md5sum) = md5sum
这么简单的问题,
事实上,如果是视频的话,
方程式实际上是这样的:
md5(data+f(md5sum)) = md5sum
其中 data 是常量,f 是另一个函数,该函数把一个字符串转换成一个用来呈现该字符串的视频流。

to liubinbj:
大家也没说不可能,
或许也是有可能的,
所以才让做出来的人去拿图灵奖呀!
如果根本就做出来,
那怎么让人家去拿图灵奖?

[ 本帖最后由 flw 于 2006-6-13 08:08 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-06-13 14:29 |只看该作者
原帖由 flw 于 2006-6-13 08:07 发表

这个问题不是
如何解方程
md5(data+md5sum) = md5sum
这么简单的问题,
事实上,如果是视频的话,
方程式实际上是这样的:
md5(data+f(md5sum)) = md5sum
其中 data 是常量,f 是另一个函数,该函数把一 ...

其实这个不是想象中那么难,山东大学的某位教授已经破解了MD5,将寻找MD5冲突的时间缩短了若干个数量级,现在貌似已经能在40分钟的时间内找到MD5的一个冲突,所以伪造这个字符串已经是可能的了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP