MD5暴力碰撞&&对王玉斌讲解PPT的总结
王玉斌者,蓝杰1020组成员也。征战ACM亚洲赛,获金奖,享誉中南信息院。余听其讲PPT两次,由浅入深,通俗易懂,颇有感触,遂总结一下,发到博客中来,与诸君共勉。
最近的一次PPT讲解是对MD5暴力碰撞的分析,因为需要处理大量的数据,蓝杰组建Hadoop集群对简单的密码进行蛮力破解试验。他的讲解是基于这样的一个背景下而来的。
首先玉斌对我们经常遇到的一个现象,在QQ中传送文件时这一现象进行了互动,为什么我们在传一个大的文件,瞬间就传上去了。讨论的大概结果是在腾讯的服务器中存了这么一个文件,在传输的过程中服务器会进行检测,服务器中是否有这么一个文件存在,而且在互动中,我中枪了。当玉斌问到是否与文件名有关时,就回答了一个有关,于是他改了个文件名,然后也是很快就传过去了(这里附一个:传输的文件是JDK,这东东腾讯服务器中肯定存在了)。于是问题抛出,腾讯是如何做的呢?
而后,使用了现实中的两个Boy争抢一个Girl的例子,对网络传输中的安全性问题又抛出了疑问?那这两个问题我们可以采用什么样的方式解决呢?于是有了数字摘要这一概念的出炉,这张PPT中将数字摘要类比为一个函数的功能。MD5就是这样一套算法,你给我一个文件,我给你映射成为一个128位的东东,这样你就可以直接使用这个东西来进行校验,刚刚抛出的两个问题也可以使用这样的方法解决(不过腾讯是不是这样做的我们不知道~~)
随后怎么去构建这个MD5映射,于是玉斌敲了几行代码进去,简单的测试了一下,下面的代码是后来我写的,跟他当时写的出入不大,代码如下:
package MD5Test;
import java.security.NoSuchAlgorithmException;
/**
* Message Digest Algorithm MD5(消息摘要算法第五版) 测试类
* @author 赵广超
*/
public class MD5Test {
public static void main(String[] args) {
java.security.MessageDigest md5;
try {
md5 = java.security.MessageDigest.getInstance("MD5");
String msg = "123456";
byte digest[] = md5.digest(msg.getBytes());
//这里要将byte转化为16进制数
for(int t : digest) {
String hex = Integer.toHexString(t&0xff);
if(hex.length() ==1 ){
System.out.print("0"+hex);
}else{
System.out.print(hex);
}
}
System.out.println();//换个行
//再来一种将byte转化为16进制显示的方法
for(int t:digest){
//或者用下面的方法
//这里t是整型,用0xff与后变成只剩后两位的byte了
System.out.print(String.format("%02x", t & 0xff));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
控制台输出的结果是(代码中写了两种输出的方式,所以下面有两行):
e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e
网络上的MD5加密/解密网站给出的结果:
然后大家可能会有疑惑,网络上那么多的数据,怎能保证每一个不同的文件都有不同的MD5值呢?然后玉斌用了淘宝图片的例子,结合数学中比较大小时常用的放大缩小的方法进行了解释,PPT如下:
如此下来,说明了MD5值不是不会遇到重复的情况,只是这个概率小的很多很多,远远小于我们买彩票中奖的概率,这样我们用它起来也就没有那么多的担心了。然后玉斌又提出了一个不可逆和不可解的问题出来,因为这直接关系到我们要解决的暴力破解的问题。
如PPT中所述,枚举部分MD5值对应的密码,我们所需要处理的数据需要50个G并且需要超强的计算能力,所以为“蓝云”小组的成立和Hadoop集群的搭建做好了铺垫。
经过他这么一讲,我很快就明白了MD5是个啥东东,云计算平台可以做些什么东东,听完其讲解,三万六千个毛孔,通体透着明白后的“爽”。这次讲解之中,我们可以很容易的看出他准备的很充分,讲的很投入,也讲的很透彻。现在就做一个小小的总结,希望自己也能达到他讲PPT时的那种境界。
如果要我来分析make PPT时的设计思路,首先得明白讲的是什么?为什么要讲这个(基于什么的大环境)?怎样组织思路去讲?那么我得看到要讲的这个东西解决了现实中的什么问题,人是活在现实中的,往往与自身密切相关的东西会更加引起注意,以身边发生的案例来进行说明可以有效的吸引听众,比如现实中我们使用QQ聊天过程中经常需要传数据,逛淘宝时看过的无数图片和现阶段听众(学生)最关注的男女朋友话题。从现实中提升起来,那么这个MD5的本质是什么?消息摘要。是如何实现的?这就要讲求知识屏蔽了,如果要把MD5算法是怎么实现的讲出来,那估计需要花大力气去研究,而且还不一定能够讲清楚。而这里我们也不需要做这一步,在这里我们只需要知道怎么用就好了(就好像我用PS修改图片,并不需要知道PS软件是如何实现的),于是java中如何实现的代码到了PPT上。在深入思考后发现这个东西有个问题,即不同文件的MD5值是否是不同的呢?于是带着验证的思路,搜了一些资料,利用淘宝图片的例子和中彩票很难的例子,说明发生的几率很小,过多的担心是没有必要的。最后结合大环境,我们要进行对MD5简单密码的暴力破解,需要大量的计算能力,于是需要将机器互联。
以下是我对讲解PPT的思考与总结:
1. PPT的设计思路要条理,连贯性要强。
在什么样的情况下会提出所讲内容的问题;
所讲内容的实质是什么;
怎样去解决问题;
这样的解决方案是否会有不合理性,如何验证;
还可以解决其他的什么问题。
2. 对某一难以理解的问题,不妨用现实中的例子来进行阐释。
3. 需要注意知识屏蔽。
4. PPT的画面感要好,深蓝渐变色(乔布斯使用过的),黑体、微软雅黑很不错,最好一张PPT的色调不超三种(简约美)。
5. 讲解前的准备工作很重要。
6. 讲解的语气、神态等等很重要。
就分析到这里吧,再有思考了写!想到了一个词“象征性结束”,技术这东西,对一个知识点的理解,完全透彻的搞明白不太容易。“结束”这个词用在技术学习上不太适用。
感谢王玉斌同学的讲解和允许我在博客中直接引用他的名字。
——2013年1月26日凌晨记于刘洋寝室
上一篇: 严禁带交通工具来学校
下一篇: 反射(Reflaction)初探