加密算法极先锋之MD5算法
在开发过程中,避免不了要涉及到数据加密,比如用户账号密码的加密,用户敏感数据的加密,涉及到的加密算法种类繁多,作为拿来主义的开发者时间精力有限,能够清楚其中主流的加密算法和用途,就已经足够了。

主要的数据加密算法主要有:md5、sha、aes、des、rsa、base64等等。
先来看看我们的老熟人:md5算法,几乎在任何一个系统中,都少不了他的身影。MD5算法全称叫 Message Digest Algorithm 5(信息摘要算法5),是数字摘要算法的一种实现,摘要长度为128位。由于其算法的复杂性和不可逆性,主要用于确保信息传输完整性和一致性。他还有早期的“不太争气”的几代MD2、MD3、MD4(早期的几代就是由于复杂度不够被破解了)。正是由于MD5算法有如此特性,在业界应用非常广泛,主流的编程语言都自带有MD5的实现。

最常见的,很多系统中的用户密码都采用了MD5加密算法进行加密。但是树大必然招风,就像windows系统应用广泛了,安全性就收到了挑战,MD5也不例外。度娘一下就会发现,有诸多网站提供MD5破解,有的甚至需要收费提供破解服务。
不过不用担心,目前能破解MD5并还原出原始数据的成功率很低(当然像123456这种弱智的原文,就不要提了,其他的破解可以自行度娘试试)。这就需要提到现行MD5算法的主要破解思路,其实核心只有一个,那就是暴力碰撞(其他还有两种 字典法、彩虹表法都是暴力碰撞法的改良,原理一样),说白了就是用已知的字符进行各种变态组合,生成众多的密文与原文的对应库,然后反向根据密文,找到对应的明文。
比如,你的明文数据是 abcd1234(当然实际不应该这么简单,这里只是举例),加密出来的密文是e19d5cd5af0378da05f63f891c7467af,那么不安好心的人就会用密文e19d5cd5af0378da05f63f891c7467af去提供这种破解的工具或者服务那里,查询这个密文有没有对应明文,如果有,就代表破解成功了,然后他就拿这个“破解”得到的明文去登录你的账号,结果可想而知。

成功进入了你的领地,但这个成功,是不完美的。因为md5的不可逆性,大多数账号登录过程,只能拿用户输入的原文加密成MD5密文后去跟数据库里的密文比较,相同则认定密码正确。
但这也有漏网之鱼,因为即使破解出来的结果不是上面说到的abcd1234而是xxxxx,也有可能用xxxx成功登录系统。
因为MD5虽然不可逆,但不是唯一性。 这里所谓的破解,并非把摘要还原成原文。为什么呢?因为固定128位的摘要(也就是加密后的密文)是有穷的,而原文数量是无穷的,每一个摘要都可以由若干个原文通过Hash得到。换句人话说,就是不同的原文可能加密后得到相同的密文。那么拿密文猜测原文就会得到多个结果,单纯比较密文,就会被认为是一致的。而反过来,也是同理。拿到不一定对的还原出来的明文去做其他操作,也不一定能成功。

总结一下,MD5加密算法之所以破解成功的概率很低,主要由于以下几点:
1)依赖暴力碰撞的破解思路,意味着需要尽可能多的组合所有字符,形成海量的配对库,用于通过密文反向查询明文,但字符种类千千万万,所有都进行组合,可能性都超过地球的细胞总数了,估计现在所有硬盘加在一起的空间都存不下,成本之高,可想而知。
2)目前能破解的都属于已经被组合猜测过的,一般也都是长度较短的或者比较有规律的组合。只要长度越长越没有规律,不同类型字符组合越多,破解概率越低,几乎不会成功。
3)就算密文对了,原始明文也不一定对,当然这是最后一道防线,听天由命了。
另外,MD5的用途,目前主流的无非两种,一种是用于类似用户密码等不需要还原的敏感数据的加密,一种是用于确保信息传输完整性和一致性。其实,第二种用途才是他诞生的初衷。
这里简单提一下第二种用途。很多支付接口、数据交互接口,都采用基于MD5来确保数据的完整性和一致性,也就是在网络传输过程中没有被篡改。如何保证数据不被篡改,仅仅依靠MD5做不到,还需要联手其他加密算法,具体请后续再谈。
本文由弈码当先 root1024 独家发布!
加密算法极先锋之MD5算法的更多相关文章
- 加密算法之 MD5算法
题记:本人自测了很多次,该算法和apache的commons utils包中的MD5算法计算一致 一.针对文件内容生成MD5值 应用场景:针对文件,在传输过程由于网络原因丢帧或者被人别恶意篡改内容,可 ...
- MD5算法C/C++的实现
博客链接:http://blog.csdn.net/qq1084283172/article/details/52334027 在逆向程序的时候,经常会碰到加密的算法的问题,前面分析UC的逆向工程师的 ...
- md5算法原理一窥(其一)
首先,需要了解的事,md5并不是传说中的加密算法,只是一种散列算法.其加密的算法并不是我们说所的那样固定不变,只是一种映射的关系. 所以解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD ...
- Java利用MessageDigest提供的MD5算法加密字符串或文件
MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...
- MD5算法【计算文件和字符串的MD5值】
1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错).任何长度的任意内容都可以用MD5计算出散列值.MD5的前身:MD2.MD3.MD4.介绍工具:CalcMD5 ...
- password技术应用设计实践-安全信息传输系统(SITS)(用Java实现DES、RSA、MD5算法)
本系统包含五个模块,注冊模块.登录模块.RSA算法模块.DES算法模块.MD5算法模块. 这五个模块每个实现不同的功能. 注冊模块实现将username和password写入文件里,登录模块则负责将其 ...
- 【密码学】MD5算法原理
MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能: 输 ...
- 【编程开发】MD5算法原理
MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能: ...
- MD5算法+盐Salt
1.MD算法的基的概念 MD5算法是典型的消息摘要算法,其前身有MD2.MD3和MD4算法,它由MD4.MD3和MD2算法改进而来.不论是哪一种MD算法,它们都需 要获得一个随机长度的信息并产生 ...
随机推荐
- 图解kubernetes调度器抢占流程与算法设计
抢占调度是分布式调度中一种常见的设计,其核心目标是当不能为高优先级的任务分配资源的时候,会通过抢占低优先级的任务来进行高优先级的调度,本文主要学习k8s的抢占调度以及里面的一些有趣的算法 1. 抢占调 ...
- springmvc 简化Javaweb 简单应用
第一步 : 导入外部jar包,放在如图目录下 第二步:简单配置web.xml 文件 <?xml version="1.0" encoding="UTF-8" ...
- IDEA中的JUNIT测试
安装插件 Ctrl+Alt+s→Plugins→junitgenerator v2.0 Alt+insert 选中JUnit test 中JUnit4 package test.com.demo.co ...
- [bzoj1005] [洛谷P2624] 明明的烦恼
Description 自从明明学了树的结构,就对奇怪的树产生了兴趣-- 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N(0 ...
- Scala 学习(6)之「对象」
目录 object 伴生对象 继承抽象类 apply方法 main方法 用 object 来实现枚举功能 object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 met ...
- Dynamics CRM Tips
这里是作为开发中遇到的各式各样的问题的总结贴. 如果对Dynamics CRM 开发有兴趣, 请参考Step by Step 开发dynamics CRM 移除sitemap中的entity 从O36 ...
- python,for循环的使用案例集
1.循环执行某一系列操作.将该操作定义为一个def,然后使用for去循环执行该操作 思路,先把操作定义为一个函数,在for循环执行这个函数 比如下面案例,把微信好友列表内的好友,循环的方式依次调整到第 ...
- 高阶函数及 map、reduce、filter 的实现
博客地址:https://ainyi.com/85 2020 开年国家经历了不少困难,最为凶猛的局势就是新型冠状病毒的蔓延,国务院最终决定春节假期延长至==2 月 2 号==:公司决定 3 - 7 号 ...
- AS中加载gradle时出现Gradle sync failed: Could not find com.android.tools.build:gradle.的错误
时间:2019/12/7 这次接着整理加载gradle时出现的错误 出现的错误: Gradle sync failed: Could not find com.android.tools.build: ...
- SOAP与REST API的爱恨情仇
之前一直想写些RESTful相关的文章,却一直未付诸行动.直到最近接手一个新的项目,对这块重新温习,乘此机会写些相关帖子.欢迎大家评论留言,如有错漏之处,也望各位大佬不令赐教. 话不多说,干活顶上. ...