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算法存储密码时,六位的数字大小写字母混合密码是不安全的,八位的单一类型字母密码是不安全的,十位的纯数字密码也是不安全的。
附程序下载地址:https://download.csdn.net/download/shaowl111/20061099
MD5破解实验与个人的MD5暴破程序介绍相关推荐
- 关于MD5破解这件事
blog.csdn.net/singlerace/article/details/1360400 前 几天在论坛上看到有人在讨论MD5的破解,很多人对MD5的理解让我大跌眼镜:有人认为MD5是一种加密 ...
- 一些国外的MD5破解网站
国外的MD5查询网站只支持32位散列,和国内的16位散列不同,而16位散列据我所知还没有有效地方法可转换为32位. 一般的16位MD5是取32位的第9到16位,也就是去除了32位的前8位和后8位,基本 ...
- 【转】理论计算机初步:从hash函数到王小云的MD5破解
转:http://zhiqiang.org/blog/science/computer-science/preliminary-computer-theory-xiao-yun-wang-from-t ...
- .NET破解之太乐地图下载器【非暴破】
不知不觉,接触破解逆向已经三个月了,从当初的门外汉到现在的小白,这个过程只有经历过才知道其中的苦与乐: 有无知.困惑.痛苦.惊喜.彻悟.欣慰-- 有无助的软件脱壳,茫然的代码分析,有无趣的反复测试, ...
- C#毕业设计——基于MD5+RSA的数字签名设计与实现(毕业论文+程序源码)——数字签名系统
基于MD5+RSA的数字签名设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于MD5+RSA的数字签名设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开题报告PPT模板及论 ...
- MD5流程以及安全性分析,MD5加盐,MD6,笔记
版权归其所有论文作者所有. 并没写原始的地址,因为这是我整合的,作者太多,包括我.太匆忙,原作者可以联系我. 简介 MD5适用于数据完整性校验的.将任意长度的字节串(所以是基于底层的二进制串的),映射 ...
- MD5加密安全吗(解析MD5)
MD5 是 Message Digest Algorithm 的缩写,译为信息摘要算法,它是 Java 语言中使用很广泛的一种加密算法.MD5 可以将任意字符串,通过不可逆的字符串变换算法,生成一个唯 ...
- python2 md5库_python版本坑:md5例子(python2与python3中md5区别)
起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" ...
- c语言md5函数 linux,【转】MD5校验C语言实现源代码
/* 带密钥的MD5算法库md5.h共有下列函数: char* MDString (char *); // 输入任意一个字符串,经过md5算法处理后,返回结果:一个定长(32个字符)字符串 char* ...
- linux 文件md5,Linux下计算文件的MD5值
脚本功能 脚本使用Perl编写,计算文件的MD5值 脚本用途 服务器在安装完操作系统后,计算PATH变量里面所有的二进制文件的MD5.计算单个文件MD5值.计算某个目录(包括子目录)下所有的文件的MD ...
最新文章
- R语言使用caret包中的createFolds函数对机器学习数据集进行交叉验证抽样、返回的样本列表长度为k个
- PS Material 漫谈 六: Material Availability Check
- PaddleHub人像分割模型:AI人像抠图及图像合成
- python用电度数设计_Python时间序列预测实战(电力负荷预测)
- TensorFlow(六)with语句
- TCP/IP协议读书笔记(1)
- android 获取已安装应用的安装包,Android获取设备已安装的应用
- 谷歌停止华为合作;联想声明未向华为断供;Android 遭反垄断调查 | 极客头条...
- 网络工程师 名词解释
- 什么是超级浏览器?目前超级浏览器有哪些分类?
- html 计数器 样式,CSS3 计数器_html/css_WEB-ITnose
- 安捷伦万用表--Agilent34401A数字万用表串口发送数据只上位机使用说明
- Lol(英雄联盟)自动输入密码
- App自动化测试 —— Appium的使用
- java面试题-捕获异常
- Oculus检测到你的NVIDIA驱动问题,解决办法
- 【Java】 # 使用java调用MySQL的函数、存储过程
- 数据结构与算法基础(青岛大学-王卓)(1)
- MacBook Pro 把机械硬盘换成固态硬盘
- C语言近似值求pi,C语言-计算π的近似值