当前位置: 首页 > article >正文

加密算法先锋 —— MD5算法

前言

在开发过程中,避免不了要涉及到数据加密,比如用户账号密码的加密,用户敏感数据的加密,涉及到的加密算法种类繁多,能够清楚了解其中主流的加密算法和用途,就已经足够了。主要的数据加密算法主要有:md5、sha、aes、des、rsa、base64等等。今天先来看看我们的老熟人:md5算法

一、MD5算法

MD5算法是哈希算法的一种,MD5算法全称叫 Message Digest Algorithm 5(信息摘要算法5),是数字摘要算法的一种实现,摘要长度为128位。MD5 的核心是通过算法把任意长度的原始数据映射成128 bit 的数据。MD5由美国密码学家罗纳德·李维斯特设计,于1992年公开,用以取代MD4算法。

二、MD5 到底算不算加密算法?

由于它哈希算法的典型特征,注定了他无法从密文准确还原出明文,因此MD5算法不能算真正意义上的加密算法,但几乎在任何一个系统中,都少不了他的身影。很多地方也笼统地叫它是加密算法。由于其具备了足够的复杂性和不可逆性,因此主要用于确保信息传输完整性和一致性。他还有早期的“不太争气”的几代MD2、MD3、MD4(早期的几代就是由于复杂度不够被破解了)。

三、MD5的特征

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

四、MD5的安全性

最常见的,很多系统中的用户密码都采用了MD5加密算法进行加密。但是树大必然招风,就像windows系统应用广泛了,安全性就收到了挑战,MD5也不例外。度娘一下就会发现,有诸多网站提供MD5破解,有的甚至需要收费提供破解服务。不过不用担心,目前能破解MD5并还原出原始数据的成功率很低(当然像123456这种弱智的原文,就不要提了)。

【4.1】MD5算法的主要破解思路

其实核心只有一个,那就是暴力碰撞(其他还有两种:字典法、彩虹表法都是暴力碰撞法的改良,原理一样),说白了就是用已知的字符进行各种变态组合,生成众多的密文与原文的对应库,然后反向根据密文,找到对应的明文。

比如,你的明文数据是 abcd1234,加密出来的密文是e19d5cd5af0378da05f63f891c7467af,那么不安好心的人就拿着你的密文e19d5cd5af0378da05f63f891c7467af 去网上提供这种密文破解工具库或者服务那里,查询这个密文有没有对应明文,如果有,就代表破解成功了,然后他就拿这个“破解”得到的明文去登录你的账号,结果可想而知。成功进入了你的领地

但这也有漏网之鱼,因为即使破解出来的结果不是上面说到的abcd1234而是xxxxx,也有可能用xxxx成功登录系统。因为MD5虽然不可逆,但不是唯一性。 这里所谓的破解,并非把摘要还原成原文。为什么呢?因为固定128位的摘要(也就是加密后的密文)是有穷的,而原文数量是无穷的,就是不同的原文可能加密后得到相同的密文。那么拿密文猜测原文就会得到多个结果,单纯比较密文,就会被认为是一致的。而反过来,也是同理。拿到不一定对的还原出来的明文去做其他操作,也不一定能成功。

【4.2】MD5加密算法之所以破解成功的概率很低,主要由于以下几点:

1、依赖暴力碰撞的破解思路,意味着需要尽可能多的组合所有字符,形成海量的配对库,用于通过密文反向查询明文,但字符种类千千万万,所有都进行组合,可能性都超过地球的细胞总数了,估计现在所有硬盘加在一起的空间都存不下,成本之高,可想而知。

2、目前能破解的都属于已经被组合猜测过的,一般也都是长度较短的或者比较有规律的组合。只要长度越长越没有规律,不同类型字符组合越多,破解概率越低,几乎不会成功。

3、就算密文对了,原始明文也不一定对,当然这是最后一道防线,听天由命了。另外,MD5的用途,目前主流的无非两种,一种是用于类似用户密码等不需要还原的敏感数据的加密,一种是用于确保信息传输完整性和一致性。其实,第二种用途才是他诞生的初衷。

五、在Vue中引入MD5

【5.1】npm安装

npm install --save js-md5

【5.2】使用

1)方法一

    // 在需要使用的项目文件中引入:import md5 from 'js-md5';// 使用:md5('admin') // bca6cdedf5e5b1b02f718438ac61ca12

2)方法二

    // 在main.js文件中将md5转换成vue原型:import md5 from 'js-md5';Vue.prototype.$md5 = md5;// 在需要用到的文件中使用:this.$md5('admin') // bca6cdedf5e5b1b02f718438ac61ca12

 

http://www.lryc.cn/news/2412529.html

相关文章:

  • CMMI 4高级别过程改进案例介绍
  • 大学生必备软件免费自学视频教程,让那些培训班都见鬼去吧
  • 宿舍管理查询系统
  • ZigBee网络基础
  • Docker搭建LDAP统一用户认证
  • 网上购票系统平台
  • 盘点那些免费的AI对话工具(国内篇):国内TOP3 AI聊天机器人产品介绍
  • PCB设计中几款主流电子电路仿真软件优缺点比较(转载)
  • JAVA短信验证码接口API
  • SpringBoot实现发邮箱验证码简单实现
  • 【博主推荐】html好看的个人简历网页版(附源码)
  • 张小龙谈用户体验
  • 纯手码优质JAVA面试八股文
  • 数字媒体概论——视频
  • 代码传奇 | 身价10亿的程序员 雷军当年也为他打工——WPS之父 求伯君
  • asp:DropDownList 的一些属性
  • 网络抓包原理及Fiddler的使用
  • SHELLEXECUTEINFO,ShellExecuteEx
  • Win7 开启显示快速启动工具栏,发送到快速启动右键菜单
  • leetcode刷题汇总
  • 假如金融危机来临,比特币、房产、黄金哪个更保值?
  • rr与hr_统计基本功:OR、RR和HR的区别和选择
  • 方差分析(单因素ANOVA(One-Way ANOVA)、两因素ANOVA(Two-Way ANOVA))
  • Halcon找圆系列(1)如何检测圆形
  • 硬盘检测HD tune使用教程(图文)
  • 全国大学生网络安全精英赛练习题
  • 活久见!TCP两次挥手,你见过吗?那四次握手呢?
  • [Win10]鼠标没用,插入USB口电脑提示USB Optical Mouse找不到驱动程序的解决方案
  • 智能股票选取系统(JSP+java+springmvc+mysql+MyBatis)
  • 怎样利用directX SDK