一张可以显示自己 MD5 值的 gif 图
来源:互联网 发布:手机淘宝首页如何装修 编辑:程序博客网 时间:2024/05/02 04:42
本文共 2051 字,其中包括 3 张图片,6 个外部链接。读完大概需要 20 - ∞ 分钟。由于公众号不支持外部链接,可以点击文章最后的阅读原文。
这是一张神奇的 gif 图片,它可以显示自己的 MD5 值。
这张图片的 MD5 值是:
f5ca4f935d44b85c431a8bf788c0eaca
原始图片地址:https://shells.aachen.ccc.de/~spq/md5.gif
相关链接:
An animated GIF that shows its own MD5 Reddit:Animated
GIF displaying its own MD5 hash • r/programming
文中讨论区也大致解释了图片的生成原理。
1979 年 Ralph Merkle 博士发表了关于单向函数构造抗碰撞的信息摘要论文 R.C. Merkle. Secrecy, authentication, and public key systems. (PS:后来博士转而去研究奈米科技以及人体冷冻技术)
(图片来源维基百科:Merkle-Damgård construction)
Merkle 就是 MDx 中的 M,另一 D 是丹麦人 Ivan Damgård。(伊万???)
在 13 年后的 1992 年,Ronald Rivest 发表了 MD5 算法,用于改进之前的 MD、M1、...、M4 算法。
通过再仔细观察上面的图就很容易发现,MDx 族算法是一种基于块的流式算法。
我们回到这张神奇的 gif 图上,本质是一种碰撞攻击 Herding Hash Functions and the Nostradamus Attack。
王小云的差分攻击算法虽然可以找到 MD5 的消息碰撞对,但是她找到的碰撞消息对是一组随机比特字符,碰撞消息对没有语义。而前缀构造碰撞算法可以构造出只有尾部不同的两个文件。
(图片来源见水印)
如果我们找到一个碰撞,可以用两个不同的值然后给他们分别附加数据后可以计算出相同的值:
在原始的 MD5 碰撞基础上,计算两个消息 M1 和 M2,有 H(M1) = H(M2),其中函数 H(x) 是计算哈希值函数。Stevens 扩展了该研究,并且找到了一种方法,使两个已知值 P1 和 P2 通过附加字节产生碰撞。
使用前缀 P1 和 P2,他能够证明如何找到 S1 和 S2,使得 H(P1 | S) = H(P2 | S2)。
而这张图使用了类似的方式,在评论中有人提到:
Generate a gif for each possible digit in the first column
Append collision blocks to each gif to make a 16 way collision
Repeat for each digit
Hash the final product
Replace each digit with the correct digit
如果想自己构造要给碰撞程序,可以参考这个链接:Create your own MD5 collisions。
- 一张可以显示自己 MD5 值的 gif 图
- 加载一张gif动态图
- 可以播放GIF和显示圆形图片的自定义ImageView
- Glide真的可以显示gif且能控制结束
- 美化自己的对话框--MFC显示GIF动画图片
- 自己填充int数组,生成bitmap,显示一张纯色图。
- 一张图来回顾自己的知识
- android显示gif动态图的方法
- 一张表内自己更新自己的列值
- Android显示一张很长的图
- iOS开发之初:根据一张gif图,返回其中每一帧的图片数组(ImageView加载gif))
- 自己写的一个小函数,可以加载一张网络图片。
- 一张可以思考的图片
- ios gif图显示
- 显示GIF动态图
- GifView显示gif图
- Gif动态图显示
- Android 显示gif图
- [译] TC39,ECMAScript 和 JavaScript 的未来(Part 1)
- 当我们参加前端技术峰会时,我们该听什么
- 论腾讯 TFC 抽奖程序作弊的可能性,以及代码中存在的 bug
- 为您的 Node 性能选择最佳的 JS 引擎
- 在虚拟的世界中,自由、平等永远是真正的程序员永久的追求
- 一张可以显示自己 MD5 值的 gif 图
- Codeforces Round #436 (Div. 2)Bus
- ES6 中的 this & super:babel 和 typescript 都错了
- 每个前端程序员都有一个V8梦(附福利)
- 使用 Node.js\/D8 分析 javascript 如何被 V8 引擎优化的
- 如何优雅的处理 Promise 的 if-else 分支
- 透过 V8 引擎看 ES2015 语法 async\/await 的本质
- 知识付费时代来临,欢迎一起交流分享
- [V8内核系列] 开启对象属性的“fast”模式