说到密码学,现在真的是非常的头大,为啥呢?因为密码学真的是有点难度呀,各种各样的加密手段,各种各样的解密手段,像 MD5 呀,还有 RSA 呀,还有 DES 呀,反正就是一大堆,接下来的几天,就来逐个的分析一下这个关于密码中的各种加密手段,以及他们是如何使用的。

MD5 的前世今生

实际上,MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

也就是说,在他之前,还有 MD4 算法,而 MD4 是麻省理工学院教授Ronald Rivest于1990年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位,一般128位长的MD4散列被表示为32位的十六进制数字。

当时设计出来 MD4之后,就出现了两个不服气的人,非要证明这个玩意是不对的,关键是,这两个人还真的成功了,一个是Den boer 另外一个Bosselaers 这两个大哥,伙同一拨人,还真的找到了 MD4 的漏洞,找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。毫无疑问,MD4就此被淘汰掉了。

而李维斯特肯定也不服气呀,于是在1992年的时候,李维斯特向互联网工程任务组(IETF)提交了一份重要文件,描述了 MD5 这种算法的原理。由于这种算法的公开性和安全性,在90年代被广泛使用在各种程序语言中,用以确保资料传递无误等。

而之后,这个 MD5 可谓是影响深远,当时据说 Den boer 另外一个Bosselaers 这两个大哥 又开始挑刺,发现了MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。所以也就没有后续内容了,于是在之后的时间里,MD5 就开始被大众广泛认知了,一直持续了四五年的时间。

在 1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如 SHA-2。

2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

所以,在之后,MD5 陆陆续续的退出历史舞台,虽然退出了历史舞台,但是,影响还是在的,至今也有 MD5 加密方式的存在,不信大家可以巴拉一下自己的项目,看看有没有关于这个 MD5 的代码存在呢?

什么是MD5

MD5码是以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

大家看一下百度百科上面给出的流程图

其实总的来说,MD5 就是对一个不变的数据进行加密,而加密之后的字符串也是不变的,只要对元数据哪怕做一个简单的字符修改,那么通过 MD5 加密之后的密码数据,都会对应的做出改变,就相当于是一个人的 “指纹”。

Java实现 MD5 那真的是太简单了,实例代码如下:

public class MD5 {/*** @param text明文* @param key密钥* @return 密文*/// 带秘钥加密public static String md5(String text, String key) throws Exception {// 加密后的字符串String md5str = DigestUtils.md5Hex(text + key);System.out.println("MD5加密后的字符串为:" + md5str);return md5str;}// 不带秘钥加密public static String md52(String text) throws Exception {// 加密后的字符串String md5str = DigestUtils.md5Hex(text);System.out.println("MD52加密后的字符串为:" + md5str + "\t长度:" + md5str.length());return md5str;}/*** MD5验证方法* * @param text明文* @param key密钥* @param md5密文*/// 根据传入的密钥进行验证public static boolean verify(String text, String key, String md5) throws Exception {String md5str = md5(text, key);if (md5str.equalsIgnoreCase(md5)) {System.out.println("MD5验证通过");return true;}return false;}
}

MD5 为什么被弃用了

既然我们上面都说了 MD5 算是比较强大的了,为什么现在 MD5 会被大家弃用了呢?

一条信息的安全性取决于任何信息摘要函数的目标是产生看起来是随机的摘要。要被认为是加密安全的,哈希函数应该满足两个要求:

1,攻击者不可能生成一个与特定的哈希值相匹配的信息。

2,攻击者不可能创建两个产生相同哈希值的消息。

根据IETF,MD5哈希值不再被认为是加密安全的方法,不应该被用于加密认证。

2011年,IETF发布了RFC6151——MD5消息摘要和HMAC-MD5算法的最新安全考虑,其中引用了一些最近针对MD5哈希值的攻击。它提到了一个在标准笔记本上一分钟或更短的时间内产生哈希碰撞的攻击,以及另一个在2.6千兆赫的奔腾4系统上仅用10秒就能产生碰撞的攻击。因此,IETF建议,新的协议设计根本不应该使用MD5,最近针对该算法的研究抨击到:在需要抗碰撞的应用中取消MD5的使用,如数字签名。

这样,就导致了当信息哈希代码无意中被重复时,它有可能造成信息碰撞。MD5的哈希代码串也被限制在128位。这使得它们比后来的其他哈希码算法更容易被破解。

所以,当人们发现这个算法不太合适的时候,就开始弃用了这个算法,慢慢的就衍生出了其他的相对于MD5 更加安全的算法了。

而当时验证最早的却不是2011年,而是2004年通过我国的王晓云教授等学者的工作,md5已经被证明可以进行碰撞攻击。也就是说,攻击者可以产生两个应用程序,内容不一样,但是哈希值完全一样。这就导致了在大家的眼中,MD5 已经算是不够安全的数据了,所以,MD5 就逐渐的被大家所淘汰,使用的情况也就不是那么多了。

为什么说MD5是不可逆的?

我们就简单的用A乘以B,一定会得到一个固定的结果C。

比如说A(188923010)和B(172389945)

但是如果只是给你一个结果C,你知道C是由那几个因式计算出来的结果吗?

我相信你也猜不出来。所以, 只能从一个方向推导结果,不能从结果反过来逆向推导,就叫单向函数不可逆, 即Md5算法不可逆。

更不用说,通过MD5的复杂算法来进行计算以后得到的固定长度值了。

但是也有很多人说的比较官方,就像百度上的一些大哥生活的:

MD5不可逆的原因是由于它是一种散列函数(也叫哈希函数,哈希函数又称散列函数,杂凑函数,他是一个单向密码体制,即从明文到密文的不可逆映射,只有加密过程没有解密过程,哈希函数可以将任意长度的输入经过变化后得到固定长度的输出,这个固定长度的输出称为原消息的散列或消息映射。理想的哈希函数可以针对不同的输入得到不同的输出,如果存在两个不同的消息得到了相同的哈希值,那我们称这是一个碰撞),使用的是hash算法,在计算过程中原文的部分信息是丢失了的。一个MD5理论上是可以对应多个原文的,因为MD5是有限多个而原文是无限多个的。

这么说的话,感觉如果面试官问到的话,肯定回答的不是很好,反而不如先总结一下,然后再说出自己的理解。

关于MD5 你了解了么?

姊妹篇

非对称加密之RSA是怎么加密的?
DES加密算法是怎么实现的?

MD5退出历史舞台你知道吗?相关推荐

  1. PHP即将退出,PHP4即将退出历史舞台

    http://www.phpeye.com/bbs/viewthread.php?tid=92 PHP官方团队在php.net上发布了一则公告: Today it is exactly three y ...

  2. 互联网晚报 | 04月05日 星期二 |​ ​​​考研调剂系统明日开通;微软Edge浏览器宣布10天后退出历史舞台...

    微软Edge浏览器宣布10天后退出历史舞台 4月5日消息,在愚人节当天,微软Edge浏览器官方微博发布重要通知:"对所有 Edge浏览器的使用者.爱好者说一声抱歉" .IE浏览器将 ...

  3. 感谢3G,告别3G:开启移动互联网时代的“功臣”退出历史舞台

    整理 | 章雨铭 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 移动互联网时代由3G开始,时过境迁,5G时代已经到来,3G这位开启移动互联网时代的功臣将要退出历史舞台. 图源视觉中国 ...

  4. 为什么说 Web 开发永远不会退出历史舞台?

    早在 PC 崛起之际,Web 从蹒跚学步一路走到了主导市场的地位,但是随着移动互联网时代的来临,业界曾有不少人猜测,"Web 应该被杀死,App 才是未来".不过时间是检验真理的唯 ...

  5. Windows 7 彻底退出历史舞台

    整理 | 禾木木 出品 | CSDN(ID:CSDNnews) 今日一条 #Windows7将彻底退出历史舞台#的话题冲上了热搜,引发了网友们的热议. 1 月 10 日开始,微软将不再为专业版和企业版 ...

  6. 雷军卸任小米软件技术公司董事长;微软洽谈向 OpenAI 投资 100 亿美元;Windows 7 彻底退出历史舞台|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  7. 2G、3G要退出历史舞台了?为何3G比2G淘汰更快?

    进入2020年,我国加速推进5G网络商用,加上4G的快速普及,2G.3G网络现在到了该被淘汰的时候了吗?全国超过3亿的2G.3G用户怎么办? 我国5G商用牌照发布已满一周年.一年以来,我国5G用户规模 ...

  8. 腾讯soso退出历史舞台,搜索结果全部由搜狗提供

     腾讯soso退出历史舞台,搜索结果全部由搜狗提供 前段时间腾讯4.48亿美元战略投资搜狗搜搜注入搜狗,现在soso的搜索结果已经全部由搜狗提供了,上图哈:

  9. 时隔27年,微软IE浏览器正式退出历史舞台,一个时代的结束

    关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 很遗憾「目睹」IE 浏览器退出历 ...

最新文章

  1. 书评 - 《展望敏捷软件测试》
  2. ScrollView中嵌入Listview,当item高度不一样的时候,item展示不全问题
  3. linux怎么添加ubuntu源,细说 Ubuntu Linux 软件源
  4. 实例标识助力您的应用迁上云端
  5. 上传文件到某文件夹时,提示...路径访问被拒绝
  6. java 取文本中间_Java 如何利用正则表达式提取两个指定标记符号之间的字符串内容...
  7. 大数据分析应用在哪些方面上
  8. dfs.datanode.directoryscan.throttle.limit.ms.per.
  9. ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件
  10. Java学完哪些内容能够出去找工作
  11. 手机安全卫士------手机防盗页面之sim卡绑定读取联系人
  12. org.hibernate.StaleStateException: Batch update returned unexpected row cou...
  13. 【组合数学】 卢卡斯定理详解(证明+模板)
  14. 【云原生之kubernetes实战】在k8s环境下部署BookBrowser电子书浏览器
  15. python小应用之整理手机图片_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...
  16. PostOffice
  17. Excel密码保护破解代码
  18. linux下安装blas和lapack
  19. tradingview教程 charting_library
  20. 各种小芯片Chiplet的机遇

热门文章

  1. 小程序:微信开发者工具中页面一片空白怎么办?
  2. DB2 10.5 BLU列式存储技术初试
  3. 考研数据结构の基础概念
  4. vmware版本选择
  5. 洛谷[P1396]营救 并查集
  6. fvwm key 快捷键设置
  7. 用神经网络做单变量时序预测,如何构造神经网络的输入呢?
  8. 北京理工与东南大计算机专业哪个好,西交、哈工、北理、华科、天大、东大,你中意哪个?...
  9. mysql中 escape_MYSQL escape用法--转义
  10. 太原理工2015级计算机,郝晓丽-太原理工大学信息与计算机学院