1. Hash算法

哈希算法也称摘要算法、散列算法,哈希函数的输入为一段可变长度x,输出一固定长度串,该串被称为x的哈希值
Hash函数满足以下几个基本需求:
(1)输入值x为任意长度
(2)输出值长度固定
(3)单向函数,算法不可逆
(4)唯一性,很难找到两个不同的输入会得到相同的Hash输出值

2. 概要

MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

3. 算法原理

a. 填充

消息长度应为一个比512bit的倍数少64bit的数,即:
512*n+448

512*n-64

填充方法:在消息后添加一个1,再后接多个0
后64bit为填充前消息长度
如下图所示:

这样可以对明文分组,每组长度为512bit,即16个长度为32bit的字。

b. 迭代

标准幻数
MD5输出为128bit,即4个32bit的字,可用A、B、C、D表示。
A、B、C、D为标准幻数,其初始值分别为:
A=01234567
B=89ABCDEF
C=FEDCBA98
D=76543210

对于每512bit输入,MD5运算64步,得到128bit输出,该输出参与下一轮输入,如图所示:

每轮中512bit分为16份,每份32bit,即4B,分别参与4轮运算中16步迭代运算,因此4轮共64步。

逻辑函数F、G、H、I分别如下:
F( X ,Y ,Z ) = ( X & Y ) | ( (~X) & Z )
G( X ,Y ,Z ) = ( X & Z ) | ( Y & (~Z) )
H( X ,Y ,Z ) =X ^ Y ^ Z
I( X ,Y ,Z ) =Y ^ ( X | (~Z) )

4. 应用场景

数据完整性校验
常用Web服务器本身缺乏页面完整性验证机制,无法防止站点文件被篡改。为确保文件的完整性,防止用户访问页面被篡改,可采用MD5算法校验文件完整性的Web防篡改机制,计算目标文件的数字指纹,运用快照技术恢复被篡改文件,以解决多数防篡改系统对动态站点保护失效及小文件恢复难的问题 。
密码加密
我们知道MD5加密是不可逆的,用MD5算法加密后的字符串,是无法反向推算出原始密码的,可以有效防止密码被盗,但是固定长度的纯文本加密容易被撞库,既然如此,那么我们就要对密码加盐。服务器在保存密码时,会生成一段随机字符串并添加到密码后再做MD5散列,确保密码的安全性。

数字签名
MD5 算法还可以作为一种电子签名的方法来使用,使用 MD5算法就可以为任何文件(不管其大小、格式、数量)产生一个独一无二的“数字指纹”,借助这个“数字指纹”,通过检查文件前后 MD5 值是否发生了改变,就可以知道源文件是否被改动。我们在下载软件的时候经常会发现,软件的下载页面上除了会提供软件的下载地址以外,还会给出一串长长的字符串。这串字符串其实就是该软件的MD5 值,它的作用就在于下载该软件后,对下载得到的文件用专门的软件(如 Windows MD5 check 等)做一次 MD5 校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用 MD5 算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

注意
Hash算法不是加密算法。
hash算法也被称为摘要算法、散列算法,其过程不可逆,目的主要是确保数据的完整性。
加密算法的目的主要是确保数据的保密性。

哈希算法--MD5算法相关推荐

  1. 哈希函数-MD5算法

    MD5 通过4轮运算(每轮16步,共64步),将任意长的消息压缩成为一个128bit的消息摘要,使用了4个32bit的寄存器. MD结构 MD结构是基于迭代式结构来构造碰撞稳固的Hash函数的方法,即 ...

  2. HTML如何引入md5算法,MD5算法实现

    文件下载: 文件: md5.rar 大小: 3KB 下载: unit MD5; {*********************************************************** ...

  3. MD5算法-哈希算法

    MD5算法 哈希算法MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1 ...

  4. 关于URL去重-MD5算法步骤

    URL去重-MD5算法学习笔记 URL去重-MD5算法学习笔记 在网络爬虫过程中,会爬取到很多相同的url,这个时候就需要我们去掉重复的URL.关于URL去重的算法有很多,刚刚学习了MD5算法.MD5 ...

  5. 《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希

    使用Crypto++的MD5算法对字符串进行哈希,先在VS2010中新建Win32 Console Application,取工程名为:Crypto-MD5.在工程主目录中新建文件夹include,将 ...

  6. 单向散列函数概述并基于MD5算法对文件哈希值实时监测

    1.如何验证文件是否被修改过 只生成一个指纹文件,对指纹文件进行验证 当已经存储的文件被修改之后,指纹文件就会跟着变化,即生成一个单向散列函数 任意长度的数据都对应固定长度的散列值–减少匹配开销 散列 ...

  7. 常见的哈希Hash算法 MD5 对称非对称加密 海明码

    2019独角兽企业重金招聘Python工程师标准>>> 参考 Link 另外,这篇文章也提到了利用Hash碰撞而产生DOS攻击的案例: http://www.cnblogs.com/ ...

  8. 摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法

    目录 一.摘要算法大致都要经过以下步骤 1. 明文数据预处理 1.1 填充比特 1.2 附加消息长度 2. 摘要计算 2.1 常量初始化 2.2 分组及分组拓展和分组分段 2.3 轮函数(每段一轮,此 ...

  9. C#的加密解密算法,包括Silverlight的MD5算法

    C#的加密解密算法,包括Silverlight的MD5算法 下面是一段加密解密工具类,其中的WinFormMD5Encrypt方法可以使得Winform和WebForm下的MD5加密结果一致,默认他们 ...

最新文章

  1. 用php做一个简单的汇率,vue实现简单实时汇率计算功能
  2. Spring(五):SpringStruts2Hibernate整合后,实现查询Employee信息
  3. Sql PATINDEX 函数
  4. oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...
  5. 零基础学oracle pdf_零基础学动漫插画详细步骤大全
  6. 支付接口 随机串 时间戳 防钓鱼效验方式
  7. CodeForces - 1301F Super Jaber(bfs)
  8. STM32——串口通信
  9. php数组排序综合例子,php数组实例之数组排序
  10. python画图实战_python实战学习之matplotlib绘图续
  11. 【c】正负数二进制表示
  12. 人工智能十大算法_【读书】人工智能和大数据:新智能的诞生/人工智能科学与技术丛书...
  13. 基因检测报告都用了哪些数据库?
  14. 2021年MEMS传感器产业链变化与趋势
  15. 实现用户注册功能的代码
  16. 联想G40-30进入PE鼠标键盘失灵解决方法
  17. 【转载】阿里面试回来,想和Java程序员谈一谈
  18. win10/11 亮度调节拖动条消失的问题
  19. CentOS 5/6/7使用摘记
  20. 句法分析-基于CKY的PCFG(概率上下文无法语法)

热门文章

  1. Rect、RectF矩形类
  2. base64转图片及互转
  3. 传统贸易不好做为什么不做跨境电商?
  4. js中自执行函数的作用
  5. 进入游戏开发公司后的感想
  6. vue中 关于$emit的用法
  7. 艾瑞咨询中国数据库行业研究报告正式发布,湖仓一体架构获业界认可
  8. MySQL——约束(constraint)详解
  9. 长期失眠怎么办?这几款助眠好物分享给你
  10. 视与视VIOOVI的ECRS工时分析软件带来分享:操作分析步骤有哪些?正确的操作分析步骤是什么?