密码学摘要算法之MD5

1,840 阅读5分钟

摘要算法

摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切 联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对 数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得 原数据内容,因此它通常只能被用来做数据完整性验证。

如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包 括 MD2、MD4、MD5、SHA、SHA-1/256/383/512 等。 常用的摘要算法主要有 MD5 和 SHA1。D5 的输出结果为 16 字节,sha1 的输出结果为 20 字节

MD5

MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。

原理

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

特点

  1. 输入任意长度的信息,经过处理,输出为128位的信息(数字指纹)
  2. 不同的输入得到不同的结果(唯一性)
  3. 根据128位输出的结果不可能反推出输入的信息(不可逆)

用途

防止被篡改,一致性检验

  • 比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改
  • 比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果
  • SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

数字签名(防止抵赖或者说版权)

  • 这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。

举例:

  • 比如下载服务器针对一个文件预先提供一个MD5值,用户下载完该文件后,用我这个算法重新计算下载文件的MD5值,通过比较这两个值是否相同,就能判断下载的文件是否出错,或者说下载的文件是否被篡改了
  • 比如一张图片,
    在这里插入图片描述
    这张是正版(1.jpg),那我打开图片截取一张同样的图片(8.jpg),肉眼看上去是一样的,但怎么区分谁是正版谁是盗版呢,其实就是把正版图片(1.jpg)进行加密,,交给第三方认证机构,以固定其为原版
    在这里插入图片描述

安全访问认证

在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性

搜索引擎

比如百度搜索输入cto51和51cto得到的结果是一样的,百度是怎么知道两者是一样的呢,其实是把'51'和'cto'进行MD5加密后按位运算,如果结果一致,则搜索结果相同

在这里插入图片描述

百度云||360上传的秒传功能

原理:只要服务器上有上传的文件,对比文件的MD5值,实现秒传

视频封杀

如何封杀:找MD5值,找到所有这个值对应的文件 逃避: (1)压缩一下,使其MD5值发生改变

在这里插入图片描述
可以看到和之前对1.jpg这张图片本身进行MD5加密的值完全不同 (2)对文件进行base64编码
在这里插入图片描述
从上可以看出base64编码后的文件 MD5值与原文件完全不一样,百度云搜索不到,而你下载完成后的文件再解码还原文件,其MD5值未方式改变

提升MD5加密安全性

  • 加'盐':实质上就是把所有保存的密码拼接一段固定的字符串然后进行加密,字符串尽可能的复杂,已增强破解难度. 破解平台
  • HMAC:给定一个"秘钥",对明文进行加密,并且做"两次散列"!-> 得到的结果,还是32个字符(后面再详细介绍)