256.Spring Boot+Spring Security: MD5是加密算法吗?

说明css

(1)JDK版本:1.8python

(2)Spring Boot 2.0.6算法

(3)Spring Security 5.0.9数据库

(4)Spring Data JPA 2.0.11.RELEASE安全

(5)hibernate5.2.17.Finalsession

(6)MySQLDriver 5.1.47并发

(7)MySQL 8.0.12函数

 

前言编码

   有网友在公众号留言:准确的说md5是摘要算法不是加密算法加密

       针对这个问题,当时也没有仔细的思考,空下来的时候,对于这个问题整理了下思路。

 

1、加密算法

1.1 加密和解密

1.1.1 加密

数据加密 的基本过程,就是对原来为明文 的文件或数据按 某种算法 进行处理,使其成为不可读 的一段代码,一般称为“密文”。经过这样的途径,来达到 保护数据 不被 非法人窃取、阅读的目的。

1.1.2 解密

加密 的 逆过程 为解密,即将该 编码信息 转化为其 原来数据 的过程

1.2对称加密和非对称加密

加密算法分 对称加密 和 非对称加密,其中对称加密算法的加密与解密密钥相同非对称加密算法的加密密钥与解密 密钥不一样

常见的 对称加密 算法主要有 DES3DESAES 等,常见的 非对称算法 主要有 RSADSA 等

 

1.2.1 对称加密算法

对称加密算法 是应用较早的加密算法,又称为共享密钥加密算法。在 对称加密算法 中,使用的密钥只有一个,发送 和 接收 双方都使用这个密钥对数据进行 加密 和 解密。这就要求加密和解密方事先都必须知道加密的密钥。

分析:

(1)数据加密过程:在对称加密算法中,数据发送方 将 明文 (原始数据) 和 加密密钥 一块儿通过特殊 加密处理,生成复杂的 加密密文进行发送。

(2)数据解密过程:数据接收方 收到密文后,若想读取原数据,则须要使用 加密使用的密钥及相同算法的 逆算法 对加密的密文进行解密,才能使其恢复成 可读明文。

 

1.2.2 非对称加密算法

非对称加密算法,又称为公开密钥加密算法。它须要两个密钥,一个称为公开密钥 (public key),即 公钥,另外一个称为 私有密钥(private key),即 私钥。

由于 加密 和 解密使用的是两个不一样的密钥,因此这种算法称为 非对称加密算法。

 

(1)若是使用 公钥对数据 进行加密,只有用对应的 私钥 才能 进行解密。

(2)若是使用 私钥对数据 进行加密,只有用对应的 公钥 才能 进行解密。

 

2、摘要算法

什么是摘要算法呢?摘要算法又称哈希算法散列算法。它经过一个函数,把任意长度的数据转换为一个长度固定的数据串(一般用16进制的字符串表示)。

举个例子,你写了一篇文章,内容是一个字符串'how to use pythonhashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。若是有人篡改了你的文章,并发表为'how to usepython hashlib - by Bob',你能够一会儿指出Bob篡改了你的文章,由于根据'how to usepython hashlib - by Bob'计算出的摘要不一样于原始文章的摘要。

可见,摘要算法就是经过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过

摘要算法之因此能指出数据是否被篡改过,就是由于摘要函数是一个单向函数,计算f(data)很容易,但经过digest反推data却很是困难。并且,对原始数据作一个bit的修改,都会致使计算出的摘要彻底不一样。

摘要算法 主要有 SHA-1MD5 等。

 

2.1 MD5是加密吗?

       MD5严格意义上来说,不是加密算法,而是摘要算法/散列算法,或者叫作哈希算法。

加密算法的目的,在于别人没法成功查看加密后的数据,而且在须要的时候还能够对数据进行解密来从新查看数据。而 MD5 算法是一种哈希算法,哈希算法的设计目标自己就决定了,它在大多数时候都是不可逆的,即你通过哈希算法得出的数据,没法再通过任何算法还原回去。因此,既然不能将数据还原,也就不能称之为能够解密;既然不能解密,那么哈希的过程天然也就不能称做是「加密」了。

 

简单理解:

加密后的消息是完整的;具备解密算法,获得原始数据;

摘要获得的消息是不完整的;经过摘要的数据,不能获得原始数据。

 

2.2 MD5算法是如何被破解的?

2.2.1 何谓破解?

有不少种方法能够破解,不过须要明确一点,这里所谓的破解,并不是把摘要还原成原文。为何呢?由于固定128位的摘要是有穷的,而原文数量是无穷的,每个摘要均可以由若干个原文经过Hash获得。

       对于MD5的破解,实际上都属于【碰撞】。好比原文A经过MD5能够生成摘要M,咱们并不须要把X还原成A,只须要找到原文B,生成一样的摘要M便可。

2.2.2 破解之法

MD5碰撞的方法有不少,主要包括暴力枚举法、字典法、彩虹表法等等。

暴力枚举法:顾名思义,就是简单粗暴地枚举出全部原文,并计算出它们的哈希值,看看哪一个哈希值和给定的信息摘要一致。这种方法虽然简单,可是时间复杂度极高。

       字典发:利用一个巨大的字典,存储尽量多的原文和对应的哈希值。每次用给定的信息摘要查找字典,便可快速找到碰撞的结果。这样作虽然每次破解速度很快,可是生成字典须要巨大的空间,大约须要4.65PB的存储空间

       对于彩虹表法这个理解起来就比较复杂了,有兴趣的小伙伴能够找资料了解下。

 

2.3 md5是惟一的吗?

md5做为数据库中的主键可行吗?这就涉及到一个问题,md5值是惟一的吗?答案是,不惟一。也就是一个原始数据,只对应一个md5值;可是一个md5值,可能对应多个原始数据

 

参考资料:

MD5算法如何被破解

https://blog.csdn.net/wufaliang003/article/details/79794982

浅谈常见的七种加密算法及实现

https://blog.csdn.net/baidu_22254181/article/details/82594072

摘要算法简介

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868328251266d86585fc9514536a638f06b41908d44000

MD5 加密算法详细介绍

https://blog.csdn.net/ling_du/article/details/51452091

MD5 究竟是不是加密?

https://blog.csdn.net/lspq35k7o5aj21l1h9o/article/details/81073726

历史文章

214. Spring Security:概述

215.Spring Boot+Spring Security:初体验

216.Spring Boot+Spring Security:基于内存的认证信息

217.Spring Boot+Spring Security:基于内存的角色受权

218.Spring Boot+Spring Security:基于内存数据库的身份认证和角色受权

219.Spring Boot+Spring Security:基于MySQL数据库的身份认证和角色受权

220.Spring Boot+Spring Security:自定义登陆页面和构建主页

221.Spring Boot+Spring Security:登出和403处理

222.Spring Boot+Spring Security:动态加载角色

223.Spring Boot+Spring Security:原理1

224.Spring Boot+Spring Security:自定义Filter

246.Spring Boot+Spring Security:页面白名单和获取登陆信息

13. Spring Boot+Spring Security:基于URL动态权限n种方案

248.Spring Boot+Spring Security:基于URL动态权限:准备工做 

249.Spring Boot+Spring Security:基于URL动态权限:扩展access()的SpEL表达式

250.Spring Boot+Spring Security:基于URL动态权限:自定义AccssDesionManager

251.Spring Boot+Spring Security:基于URL动态权限:自定义Filter

252.Spring Boot+Spring Security:标签sec:authorize的使用

253.Spring Boot+Spring Security:获取用户信息和session并发控制

254.Security注解:@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全

255.Spring Boot+Spring Security:使用md5加密

我就是我,是颜色不同的烟火。
我就是我,是不同凡响的小苹果。

à悟空学院:http://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/R3QepWG

Spring Cloud视频:http://t.cn/R3QeRZc

SpringBoot Shiro视频:http://t.cn/R3QDMbh

SpringBoot交流平台:http://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/R1pSojf

SpringSecurity5.0视频:http://t.cn/EwlLjHh

Sharding-JDBC分库分表实战:http://t.cn/E4lpD6e

相关文章
相关标签/搜索