当前位置: 首页 > 编程日记 > 正文

密码学摘要算法之MD5

摘要算法

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

如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包 括 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

相关文章:

Revit:从入门到精通学习教程

流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,48.0 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确) |大小:8.07 GB |时长:12h 16m Revit:从开始到专业掌握Revit 你会学到什么 Revit的最新功能 在Revit中创建…

JDBC编程:1(使用JDBC连接数据库)

使用JDBC连接数据库 下载连接MySQL数据库的驱动 这个jar包可以在官网上对照着你的MySQL版本来下载,这里我下载的是最新的8.0.20版本, 这里是8.0.20版本的驱动包:mysql-connector-java-8.0.20.zip 因为CSDN的积分不能设置永久免费&#xff0…

VS2010 编译 QT4.8.7 x64

1 下载qt4.8.7源代码,解压到合适位置(如本文为d:\qt\4.8.7) 2 设置环境变量: set QMAKESPECwin32-msvc2010set QTDIRd:\qt\4.8.7 3 修改配置文件: 修改\mkspecs\win32-msvc2010\qmake.conf将QMAKE_CFLAGS_RELEASE的O2改为O1 或 安装补丁http…

2022-2028年中国EBA树脂(乙烯丙烯酸丁酯)产业竞争现状及发展前景规划报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国EBA树脂(乙烯丙烯酸丁酯)行业市场行业相关概述、中国EBA树脂&#…

JAX_WS 2.2 规范的webservices客户端实现(Axis2,Cxf)

为了对接之前老版本的接口,折腾了好几个小时. 主要是目前我的程序采用的是axis2的jax_rpc方式发布webservices服务,用这种服务的客户端,去调用老版本的jax_ws 2.2的接口,会报Runtime空指针。 于是采用cxf,使用了cxf3.0.3(当前版本) 的wsdl2ja…

idea mybatis plugin插件,免费mybatis插件

idea的mybatis插件。一直想下一个,在大批量修改一些问题时候 mapper和.xml文件查看会方便许多。 直接在idea的插件market里看经常会卡住,直接去网站看。 于是去官网查查看,网站巨慢 https://plugins.jetbrains.com/ 曾经试过mybatis plugin的…

从头开始学习Unity着色器

MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确)|时长:56节课(4h 26m) |大小解压后:2.89 GB Unity Shaders和HLSL阴影语言的完整指南 你会学到: 编写Uni…

JDBC编程:2(数据库的基本操作)

数据库的基本操作 查询数据 在开始前先简单地介绍一下什么是静态SQL和动态SQL: 静态SQL,在编译阶段就可以确定数据库要做什么事情。在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,例如在Jav…

[Asp.net 5] Options-配置文件(2)

很久之前写过一篇介绍Options的文章,2016年再打开发现很多变化。增加了新类,增加OptionMonitor相关的类。今天就对于这个现在所谓的新版本进行介绍。 老版本的传送门([Asp.net 5] Options-配置文件之后昂的配置)。 首先上一个图&a…

android-sdk-windows版本号下载

Android SDK 4.0.3 开发环境配置及执行 近期又装了一次最新版本号的ADK环境 眼下最新版是Android SDK 4.0.3 本文的插图和文本尽管是Android2.2的 步骤都是一样的,假设安装的过程中遇到什么问题,能够留言,我会尽快回复! 系统环境的…

vs code搭建Django环境

在网上找了很多博客,看了vs code的官方文档,最终拼凑起来,终于搭建起来了djangode开发虚拟环境(win10下) 一、新建项目文件夹 F:\Python\temp\django_demo(例子) 二、在项目文件夹创建虚拟pytho…

Marvelous Designer衣袖设计教程

大小解压后:2.96G 持续时间3h 28m 包含项目文件 1280X720 MP4 语言:英语中英文字幕(根据原英文字幕机译更准确) 标题:技能分享——卓越设计师大师班(袖子) 信息: 在我的课程中,精彩设计师大师班(袖子)。在本课程中&…

Mybatis入门:1(Mybatis框架的环境搭建)

Mybatis框架的环境搭建 一.创建maven工程并导入坐标 导入坐标&#xff1a; <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><d…

html表单的创建和css的构成

产品参数 <h2>LIFAair LA500参数表</h2><table><tr><td>测试数目</td><td>单位</td><td>数据</td></tr><tr><td>颗粒物CADR</td><td>m<sup>3</sup>/h</td><t…

Gartner2014年魔力象限(商业智能和分析平台)

转载于:https://www.cnblogs.com/crsn/p/4271377.html

@SupperssWarnings注解

SupperssWarnings注解&#xff1a;压制、控制警告 SuppressWarnings(“rawtypes”) 是什么含义 SuppressWarnings压制警告&#xff0c;即去除警告 rawtypes是说传参时也要传递带泛型的参数 SuppressWarnings(“unchecked”) unchecked 执行了未检查的转换时的警告 SuppressWarn…

虚幻引擎C++编程游戏开发基础

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:23.8 GB |时长:44h 59m 学习C编程和游戏开发基础和虚幻引擎 你会学到什么 通过简单的例子和插…

Mybatis入门:3(动态sql)

动态sql语句 if标签 基本使用 一.在ProductDao接口中创建一个查询方法findByType import com.domain.Product;import java.util.List;public interface ProductDao {/*** 根据类型来查找* param product* return*/Product findByType(Product product); }二.在映射配置文件…

javaweb学习总结(二十三)——jsp自定义标签开发入门

一、自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码。 二、自定义标签开发和使用 2.1、自定义标签开发步骤 1、编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag;2 3 import java.io.IOException;4 5 import javax.servlet.http.HttpServle…

Java数组的三种声明方式

具体的细节大家可以不用先去了解,这涉及到很多知识,只要记住输出的时候,先导包,然后再利用Arrays.toString(arr)输出就行了。如:先定义好一个长度为4的新数组,此时数组为空,使用arr[ ]数组下标来进行逐个赋值。那我们定义好数组之后,就理所应当的对声明好的数组进行赋值。那么对于未涉及过编程的小伙伴,看到这可能会蒙了。原因就是我们sout(arr)时,输出的是这个数据的内存地址,而不是真实的数据。使用数组: 只需要一个变量,然后数组中存很多的数据, 其实可以把数组想成 一个容器。

Math: Math.atan() 与 Math.atan2() 计算两点间连线的夹角

Math.atan2()函数返回点(x,y)和原点(0,0)之间直线的倾斜角.那么如何计算任意两点间直线的倾斜角呢?只需要将两点x,y坐标分别相减得到一个新的点(x2-x1,y2-y1).然后利用他求出角度就可以了.使用下面的一个转换可以实现计算出两点间连线的夹角.然而,Math.atan()只能返回一个角度值,因此确定他的角度非常的复杂,而且,90度和270度的正切是无穷大,因为除数为零,我们也是比较难以处理的~!angel为一个角度的弧度值,slope为直线的斜率,是一个数字,这个数字可以是负的。

@RequiredArgsConstructor详解&@AllArgsConstructor和@RequiredArgsConstructor区别

RequiredArgsConstructor是Lombok的一个注解,简化了我们对@Autowired书写,我们在写Controller层或者Service层的时候,总是需要注入很多mapper接口或者service接口,如果每个接口都写上@Autowired,这样看起来就会很繁琐,@RequiredArgsConstructor注解可以代替@Autowired注解。

RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分

RDIFramework.NET ━ .NET快速信息化系统开发框架 9.8 用户权限管理 -Web部分 在实际应用中我们会发现&#xff0c;权限控制会经常变动&#xff0c;如&#xff1a;需要调整角色的分配&#xff0c;需要收回与授予某些角色、用户可访问的模块&#xff08;菜单&#xff09;与相应…

python并发

python并发 &#xff08;这部分还需要改&#xff0c;先将就着看&#xff09; Python 的 threading 模块引入了锁&#xff08;Lock&#xff09;。threading 模块提供了 Lock 和 RLock 两个类&#xff0c;它们都提供了如下两个方法来加锁和释放锁&#xff1a; acquire(blockingTr…

学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:48场讲座(6h 38m) |大小解压后:2.8 GB 含课程文件 游戏开发变得容易了。使用Unity学习C#并创建自…

Mybatis入门:2(xml形式的增删改查)

xml形式的增删改查 这里感觉没啥好讲的&#xff0c;照着代码自己敲一遍、认真再看看应该都懂的。 Maven工程坐标 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http:/…

NSDate见解

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { // NSDate *date [NSDate date]; // // NSDateFormatter *formatter [[NSDateFormatter alloc] init];// yyyy 年// MM 月// dd 日// HH 24小时 hh 12小时// mm 分钟// ss 秒钟…

秒杀系统架构设计

秒杀活动的技术挑战 1. 对现有网站业务造成冲击 秒杀活动只是网站营销的一个附加活动&#xff0c;这个活动具有时间短&#xff0c;并发访问量大的特点&#xff0c;如果和网站原有应用部署在一起&#xff0c;必须会对现有业务造成冲击&#xff0c;稍有不慎可能导致整个网站瘫痪。…

SpringBoot 2.x 使用 JWT(JSON Web Token)

一、跨域认证遇到的问题 由于多终端的出现&#xff0c;很多的站点通过 web api restful 的形式对外提供服务&#xff0c;采用了前后端分离模式进行开发&#xff0c;因而在身份验证的方式上可能与传统的基于 cookie 的 Session Id 的做法有所不同&#xff0c;除了面临跨域提交 c…

在Unity中制作4种不同的游戏

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:8.6 GB 含课程素材 |时长:15h 3m Unity 制作4款无代码手机游戏 Make 4 games in Unity with …