Java教程

MD5破解实验与个人的MD5暴破程序介绍

本文主要是介绍MD5破解实验与个人的MD5暴破程序介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近在和同事讨论个人密码的安全性时,就对6位的数字及大小写字母组合的密码的安全性存在一定疑问。然后索性就写了个程序,实际来求证一下,于是就有了这篇文章和我写的实用的MD5破解程序。

一般的系统,存储用户密码时,都是将密码明文进行MD5之后进行保存的,因MD5算法的不可逆性,就算知道了存储的MD5结果字符串,也不能正常计算出密码原文。当然,可以进行穷举,将密码明文的所有可能都进行MD5运算,然后将结果与密文对比,如果相符即找到了密码原文。

还有互联网上提供了更直接的办法,就是可以在某些网站上可以直接根据MD5的结果串反查出原文。这样的网站有很多,他们提供常用的密码或强度不高的密码的反查。对于不常用的或密码强度比较高的密码,是要收费的。他们是将尽可能多的密码原文和对应的MD5结果保存在数据库中,然后可进行一对一的查询。当然、他们实际在存储时还可以做了一些技术手段以节约存储空间,比如:正常的MD5结果是16个字节,实际存储时可能只取前两三个和后两三个字节进行存储,然后每一条MD5结果可能对应好几条原文,在实际查询时,根据用户提交的MD5结果取前后几个字节,查到这几条原文,然后对每条原文进行MD5运算,结果与用户提交的串相符时反馈给用户。这种做法可以节约百分之七八十的存储空间,但对用户的实际查询没有什么影响。

好吧,作为一个CODER,要做的事情就是把这个暴力破解的程序给整出来,并且对于这种暴破的效率要有直观的感受,也就是实际体验一下不同长度不同类型的密码的安全性。

前后花了两三天时间,用C语言把这个程序给整出来了,有Windows平台和Linux平台的两种版本。程序可以对于1-16位的,包含数字、小写字母、大写字母、特殊字符的任意组合的密码进行暴力破解。当然,长度越长、包含的字符类型越多,在暴力破解时所费的时间越长。为了更高效利用现有的多核CPU,程序还支持多线程。但在实际使用时,并不是线程开得越多越好,因为你的CPU有几核是固定的,而且操作系统本身还在处理其他的很多事情,线程开得太多,反而可能会因为操作系统对线程的频率调度而减缓破解的效率。一般情况下,可查看CPU的逻辑处理器数量,然后开启比这个数量少2个的线程数。

好吧,介绍我这个程序的用法,这个程序,只提供命令行的操作方式,没有图形界面,Windows平台和Linux平台的操作命令也是相同,命令形式如下:

cmd5 parameter1 paramete2 parameter3

命令需要三个参数:

parameter1表示要破解的MD5串,注意用小写形式,如:e10adc3949ba59abbe56e057f20f883e

parameter2表示密码包含的字符类型,用相同类型的字符来指示。即用任一数字表示查找的密码范围要包含数字字符,用任一小写字母表示查找的密码范围包含小写字母,用任一大写字母表示查找的密码范围包含大写字母,用任一特殊符号表示查找的密码范围包含特殊符号,比如:0aA 表示要查找的密码包含数字、小写字母、大写字母三种字符;b* 表示包含小写字母和特殊符号;  2cH%  表示四种类型的符号都包含。

Parameter3表示要创建的线程数,用整数表示,最小为1,最大为32。

程序无需指定原文的长度,它会自动从1到16位进行暴破。

命令示例:

cmd5 e10adc3949ba59abbe56e057f20f883e 0bA 4

表示破解e10adc3949ba59abbe56e057f20f883e串,指定包含数字、大小写字母,创建4个线程并行暴力破解。

通报一下这个程序的效率,本人一台七年前的台式机,3.3GHz的CPU,单线程,每秒可以验证564万个MD5密码,这是Windows平台的程序的效率,Linux平台同样源代码的程序,效率会更高一些,可能是Linux平台的编译器对程序的优化效率更高吧。根据实验,使用MD5算法,由数字、大小写字母组成的六位的密码,用普通个人电脑单线程,2小时50分钟内可以暴破,如果多线程,时间更少。如果是八位用数字、大小写字母和特殊符号混合组成的密码,这样就算用32线程,其暴力破解时间将达到270天。

所以,在使用MD5算法存储密码时,六位的数字大小写字母混合密码是不安全的,八位的单一类型字母密码是不安全的,十位的纯数字密码也是不安全的。

这篇关于MD5破解实验与个人的MD5暴破程序介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!