摘要算法

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

如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包 括 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个字符(后面再详细介绍)

转载于:https://juejin.im/post/5d5e3b8951882556255915d0

密码学摘要算法之MD5相关推荐

  1. 摘要算法(MD5、SHA、CRC)

    文章目录 MD5 SHA1 CRC 三种区别 MD5 MD5用的是哈希函数,典型的应用是对一段信息产生信息摘要,以防止被篡改 无论多长的输入,MD5算法都会输出一个128位的一个串(通常用16进制表示 ...

  2. 分布式服务器框架之Servers.Core库实现 DES对称加密算法;SHA1信息摘要算法;MD5信息摘要算法

    1 介绍 1.1 DES对称加密算法介绍 对称加密算法 通信双方(通信主体)同时掌握一个钥匙,加解密都由这一个钥匙完成.通信双方通信前共同拟定一个密钥,不向第三方公开,发送前加密和接受后解密都由此密钥 ...

  3. 密码学七:MD5算法

    结果截图: 代码实现: #include<iostream> #include<fstream> #define S11 7 #define S12 12 #define S1 ...

  4. md5不是对称密码算法_密码学中的消息摘要算法5(MD5)

    md5不是对称密码算法 In cryptography, MD5 (Message-Digest algorithm 5) is a mainly used cryptographic hash fu ...

  5. aes算法实现c语言_消息摘要算法MD5图解及C语言实现

    前言 最近看了很多关于消息摘要算法这方面的资料,既有CSDN上面各路大神写的文章,也有这些算法的标准文档.有的讲的比较啰嗦,有的给出来的代码是直接调库的.我想写一篇文章,帮助自己理清思路,利用图解简明 ...

  6. Java实现MD5和国密SM3摘要算法

    一.JDK提供的默认MD5算法工具 MD5算法类型枚举 /*** JDK提供的默认摘要算法.** @author linzp* @date 2022/2/8 16:46*/ public enum D ...

  7. Java 常见摘要算法——md5、sha1、sha256

    目录 摘要算法简介 md5 使用jdk内置方法实现md5加密 使用bc方式实现md5加密 使用cc方式实现md5加密 sha1 使用jdk内置方法实现sha1加密 使用bc方式实现sha1加密 使用c ...

  8. 数据结构和算法(二):摘要算法之SHA和MD5

    几种常用的加密算法,篇幅的百分之九十都是从其他博客摘抄的,因为就我自己的能力,是没法写全这些内容的.另外这些算法内部深层的原理就不解释了(看过相关博客和公众号,看不懂,尴尬),只做简单的介绍,相信这样 ...

  9. 简述MD5信息摘要算法

    在之前的文章中,我们聊了不少的加密算法,今天我们聊一种被广泛使用的密码散列函数--MD5. MD5又叫MD5信息摘要算法,经常用于确保信息传输的完整性和一致性 .从严格意义上来说,MD5并不是加密算法 ...

最新文章

  1. java map缓存6_Java内存缓存-通过Map定制简单缓存
  2. 干货 | 产品经理要了解的技术类知识
  3. java程序设计复习题_java程序设计复习大全(100题及答案).doc
  4. \sdk\include\wspiapi.h(47) : error C2265: 'Unknown' : reference to a zero-sized array is illegal 解
  5. golang开发环境配置及Beego框架安装
  6. 【转】细说@Html.ActionLink()的用法
  7. java语句以什么结尾_[JAVA] 关于语句的结尾
  8. 《21天学通C语言(第7版)》一2.4 小 结
  9. 计算机如何取消还原卡,如何关闭硬件还原卡?
  10. python改变当前工作目录_在python中更改当前工作目录
  11. html插入图片用px为单位,怎样把PPT尺寸的单位设置为px像素
  12. TOM 163VIP邮箱怎么登录?163.net邮箱登录界面是什么?
  13. 西方文化寻根思潮的跨世纪演化——透视“新时代运动“
  14. 火星人的耳机(Martian Headsets)
  15. 13部成功预知未来科技的科幻电影
  16. for in 、for of详解
  17. oracle中更改用户名,Oracle 更改用户名
  18. Python urlparse总结
  19. IE下载附件,文件大小超过10M后 无法下载
  20. Cocos2dx 2.1.5 孤狼优化整合版V1.1(32位)

热门文章

  1. AngularJS-Basic(一)
  2. android-sdk-windows版本号下载
  3. 网页制作常见的问题(怎样兼容IE6/IE7/火狐浏览器)
  4. java 枚举转byte_如何在java中将一个枚举转换为另一个枚举?
  5. 智能合约语言Solidity Solidity API
  6. 分布式系统中节点之间的同步形成区块链
  7. 如何从JavaScript中的给定数字中形成最小的数字
  8. 初创企业股权架构_初创企业如何以每月不到200美元的价格利用生产级基础架构...
  9. Docker的使用(三:Docker Hub远程镜像管理)
  10. java 匿名list,java创造匿名对象的两种方法