说明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对称加密和非对称加密
加密算法分 对称加密 和 非对称加密,其中对称加密算法的加密与解密密钥相同,非对称加密算法的加密密钥与解密 密钥不一样。
常见的 对称加密 算法主要有 DES
、3DES
、AES
等,常见的 非对称算法 主要有 RSA
、DSA
等
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-1
、MD5
等。
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
历史文章
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