(1)背景介绍:
什么是MD5?

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

密码散列函数(Cryptographic hash function),又译为加密散列函数,是散列函数的一种。

MD4算法在安全上有大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用,比如MD5加密算法.

(2)知识剖析:
主要应用:

2.1一致性验证

MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515

MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。

举例描述:

我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。

具体来说文件的MD5值就像是这个文件的“数字指纹”。每个文件的MD5值是不同的,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”就会发生变化。比如下载服务器针对一个文件预先提供一个MD5值,用户下载完该文件后,用我这个算法重新计算下载文件的MD5值,通过比较这两个值是否相同,就能判断下载的文件是否出错,或者说下载的文件是否被篡改了。

利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

2.2数字签名

MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

2.3安全访问认证

MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。

2.4算法原理

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

(3)常见问题:

(4)解决方案:

(5)编码实战:
@Test
public void MD5Test(){
String password = “!ytd1129097428”;
String md1 = MD5Util.MD5(password);
String md2 = MD5Util.generate(password);
System.out.println(“加密前:”+password);
System.out.println(“普通MD5加密后:”+md1);
System.out.println(“加盐MD5加密后:”+md2);
System.out.println(“比较原文和加盐MD5加密之后是否一致:”+MD5Util.verify(password,md2));
}

输出结果:

加密前:!ytd1129097428

普通MD5加密后:add4ff4fb01ace59713390dc5876d5d0

加盐MD5加密后:96b911880466d91d3244f37bd56c4531967c28d65181f191

比较原文和加盐MD5加密之后是否一致:true

(6)拓展思考:
关于撞库破解:

这是概率极低的破解方法,原理就是:

1.建立一个大型的数据库,把日常的各个语句,通过MD5加密成为密文,不断的积累大量的句子,放在一个庞大的数据库里.

2.比如一个人拿到了别人的密文,想去查询真实的密码,就需要那这个密文去到提供这个数据库的公司网站去查询.

在线MD5解密: http://www.cmd5.com/

(7)参考文献:

https://www.zhihu.com/question/22651987

https://blog.csdn.net/dingsai88/article/details/51637977

https://baike.baidu.com/item/MD5

(8)更多讨论:

Q1:1.MD5码不是128位的吗?为何得出来的乱码有的是32位的?

A1:128位是指二进制位。二进制太长,所以一般都改写成16进制,每一位16进制数可以代替4位二进制数,所以128位二进制数写成16进制就变成了128/4=32位。

Q2:2.MD5特点是什么?

A2:1.长度固定:

不管多长的字符串,加密后长度都是一样长

作用:方便平时信息的统计和管理

2.易计算:

字符串和文件加密的过程是容易的.

作用: 开发者很容易理解和做出加密工具

3.细微性:

一个文件,不管多大,小到几k,大到几G,你只要改变里面某个字符,那么都会导致MD5值改变.

作用:很多软件和应用在网站提供下载资源,其中包含了对文件的MD5码,用户下载后只需要用工具测一下下载好的文件,通过对比就知道该文件是否有过更改变动.

4.不可逆性:

你明明知道密文和加密方式,你却无法反向计算出原密码.

作用:基于这个特点,很多安全的加密方式都是用到.大大提高了数据的安全性

Q3:3.什么是MD5加盐?

A3:比如我的银行密码是”12345”

1.得到的MD5是:827ccb0eea8a706c4c34a16891f84e7b

2.一个人截取到这个密文,那么通过撞库肯定容易撞出12345.

3.我们要做的就是加盐,银行密码还是”12345”,然后我把银行密码加上我特定的字符串才计算MD5 所以密码还是那个密码,但是变成求”12345密码加密987”的MD5值,然后再得到MD5,那么这个MD5起码可以确认那个数据库不会有.

(9)鸣谢:

感谢观看。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

什么叫MD5,MD5通常做什么用处相关推荐

  1. 什么叫MD5,MD5通常做什么用处,为什么MD5不可逆,用做密码加密的时候仍然可能会被解密?

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [什么叫MD5, ...

  2. C# 获取MD5 (MD5计算,MD5小工具)

    方式一: 双击运行,输入字符串计算MD5值:或拖动任意文件或文件夹到到工具上,自动计算MD5值. 方式二: 拖拽文件或文件夹至getMD5.exe上,可自动计算文件或文件夹下所有文件的MD5值,保存至 ...

  3. 在线php md5,md5.php

    header("Content-Type: text/html; charset=utf-8"); include "./common.php"; //非常给力 ...

  4. Md5 Md5实现原理

    参考: http://wenku.baidu.com/view/ddb1008271fe910ef12df8df.html 转载于:https://www.cnblogs.com/85538649/a ...

  5. 密码学摘要算法之MD5

    摘要算法 摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这 ...

  6. MD5加密 登录用户名密码

    以前,不太清楚,加密是怎么弄的,觉得好奇,后来 我们老师给我们写了一个很简单的, 就是用 ^ 异或字符做的,我想估计很容易就被破解了吧,一直听说有个加密算法是MD5, 前不久才接触到这个,呵呵,拿出来 ...

  7. 用Java获取文件的MD5校验和

    我正在寻找使用Java获取文件的MD5校验和. 我真的很惊讶,但是我找不到任何能显示如何获取文件的MD5校验和的东西. 怎么做? #1楼 Guava现在提供了一个新的,一致的哈希API,它比JDK中提 ...

  8. 用MD5防止文件被写入恶意代码

    前几天在某软件园下载burpsuit pro,使用后捆绑软件什么的都不说了,最后经过一番排查发现软件被人家写了恶意代码,导致本人电脑被挂马而且一般的杀毒软件没有检测到(XX管家,XX安全卫士什么的), ...

  9. ASP.Net中MD5和SHA1加密的几种方法

    首先简单介绍一下MD5和SHA1: MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Scie ...

最新文章

  1. Pytorch+LSTM+AI自动写诗实战
  2. 在shell中编写函数
  3. 【支付专区】之解析微信支付返回xml
  4. 2.Riesz定理及其应用
  5. 架构之:微服务架构漫谈
  6. 15个变态的Google面试题以及答案
  7. 状态模式 处理订单状态_将状态机模式实现为流处理器
  8. shopify二次开发教程_详细教程:如何将Shopify的Storefront API与React和Redux结合使用...
  9. C++中序列化对象并存储到mysql
  10. 苹果ios,下拉菜单错位的问题(目前iphone x没发现有这个问题)
  11. 年关将至,很多朋友想要创业的心又开始蠢蠢欲动了
  12. 如何使用键盘快捷键在Mac上录制屏幕?
  13. linux设置法语键盘布局,法语键盘布局图
  14. Windows痕迹清除技术
  15. golang it营_深入理解Go-垃圾回收机制
  16. CPU Machine Check Architecture Error Dump (CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz, CPUID: 0x
  17. jdk11压缩包下载
  18. ffmpeg AV转换常用命令
  19. Opencv---通过形态学操作提取水平和垂直线
  20. 临时或永久修改cgroup和Cgroup 入门教程:cpuset

热门文章

  1. wordpress 前英文后台中文
  2. group by 使用规则
  3. Vue项目iconfont新增svg图标
  4. 统计学入门需掌握的四点思想
  5. 使用 Vue + LayUI 做后台管理、RESTful 交互
  6. 计算机知识竞赛策划案,大学计算机基础知识竞赛活动策划书(含题目).doc
  7. linux如何发现内存卡,分享|如何在 Linux 上查找硬件规格
  8. 但愿呼我的名为旅人:松尾芭蕉俳句300读后感
  9. jvm分析工具arthas
  10. ffmpeg 生成静音测试音频