zoukankan      html  css  js  c++  java
  • 256.Spring Boot+Spring Security: MD5是加密算法吗?

    说明

    (1)JDK版本:1.8

    (2)Spring Boot 2.0.6

    (3)Spring Security 5.0.9

    (4)Spring Data JPA 2.0.11.RELEASE

    (5)hibernate5.2.17.Final

    (6)MySQLDriver 5.1.47

    (7)MySQL 8.0.12

     

    前言

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

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

    一、加密算法

    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)如果使用 私钥对数据 进行加密,只有用对应的 公钥 才能 进行解密。

     

    二、摘要算法

    什么是摘要算法呢?摘要算法又称哈希算法散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用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

  • 相关阅读:
    TCP之“3次握手,4次挥手”问题——实例分析
    TCP之“3次握手,4次挥手”问题
    IO
    select用法&原理详解(源码剖析)(转)
    select(),fd_set(),fd_isset()
    AF_INET与套接字SOCKET
    Socket 编程简介
    Spring 事务控制
    Spring-Profile详解
    Spring的常用使用场景
  • 原文地址:https://www.cnblogs.com/springboot-wuqian/p/10792019.html
Copyright © 2011-2022 走看看