`
中南大宝
  • 浏览: 34520 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

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日凌晨记于刘洋寝室

  • 大小: 18.7 KB
  • 大小: 104.6 KB
  • 大小: 101.5 KB
  • 大小: 33.4 KB
  • 大小: 38 KB
  • 大小: 34.7 KB
  • 大小: 86.8 KB
  • 大小: 75 KB
  • 大小: 92.1 KB
  • 大小: 69.4 KB
  • 大小: 79.9 KB
  • 大小: 23.2 KB
  • 大小: 52 KB
  • 大小: 25.7 KB
  • 大小: 64.7 KB
分享到:
评论
3 楼 rtttyu23 2013-01-29  
我原以为此文对MD5有更好的破解方法呢,原来是对MD5加密算法及暴力碰撞的介绍。
2 楼 中南大宝 2013-01-29  
笑揽清溪月 写道
不错

谢谢!
1 楼 笑揽清溪月 2013-01-28  
不错

相关推荐

Global site tag (gtag.js) - Google Analytics