SpringBoot实现Md5对数据库数据加密

这篇具有很好参考价值的文章主要介绍了SpringBoot实现Md5对数据库数据加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        因为开学等各种原因,导致更新的速度越来越慢,当然在此期间也进行了一些其他技术的学习,今天给大家带来的就是我们的通过MD5进行数据库加密。

MD5概述:

        MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。

MD5主要特点:

        不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样

        (一个MD5理论上的确是可能对应无数多个原文的,因为MD5是有限多个的而原文可以是无数多个。比如主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数。也就是一共有2^128种可能,大概是3.4*10^38,这个数字是有限多个的,而但是世界上可以被用来加密的原文则会有无数的可能性)

MD5的性质:

  1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的(相当于超损压缩)。
  2. 容易计算:从原数据计算出MD5值很容易。
  3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  4. 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
  5. 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

        虽说MD5有不可逆的特点但是由于某些MD5破解网站,专门用来查询MD5码,其通过把常用的密码先MD5处理,并将数据存储起来,然后跟需要查询的MD5结果匹配,这时就有可能通过匹配的MD5得到明文,所以有些简单的MD5码是反查到加密前原文的。

        为了让MD5码更加安全,涌现了很多其他方法,如加盐。 盐要足够长足够乱 得到的MD5码就很难查到。

MD5用途:

1.防止被篡改:

  • 比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
  • 比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。
  • SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

2.防止直接看到明文:

        现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。(比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。)

3.防止抵赖(数字签名):

        这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。

  1. 比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
  2. 比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。
  3. SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

SpringBoot使用:

SpringBoot实现Md5对数据库数据加密

首先,还是会利用到我们的hutool:Hutool参考文档 

SpringBoot实现Md5对数据库数据加密

        我们发现,hutool工具类里面的SecureUtil可以对我们的MD5进行使用,那么我们就可以更好更简单的去实现我们的MD5加密了

依赖导入:

SpringBoot实现Md5对数据库数据加密

        <!-- hutool  -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.20</version>
        </dependency>

然后在我们新建的SpringBoot项目里面进行我们的一个测试

private static final String PASSWORD = "123456";

    @Test
    public void testMd5() {
        String res1 = SecureUtil.md5(PASSWORD);
        String res2 = SecureUtil.md5(PASSWORD);
        System.out.println(res1);
        System.out.println(res2);
        System.out.println(res1.equals(res2));
    }

最后在我们的控制台里面输出,并得到一下结果

SpringBoot实现Md5对数据库数据加密

        那我们如何使用到我们的数据库呢?按照思路,我们应该从用户的注册就开始进行对我们的密码进行加密处理,所以我们需要在我们的Service进行编码处理程序。 

SpringBoot实现Md5对数据库数据加密

        我们在控制层获取到我们用户的数据,把它当做一个包命名为UserDTO,单独封装起来,方便我们随时对我们的数据进行处理和查找。我们在UserDTO里面对密码进行加密之前要获取我们的数据,也就是我们的密码。 

@Override
    public User register(UserDTO userDTO) {
        // 用户密码 md5加密
        userDTO.setPassword(SecureUtil.md5(userDTO.getPassword()));
        userDTO.setNickname(userDTO.getUsername());
        userDTO.setSex("男");
        userDTO.setAvatarUrl("https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png");
        User one = getUserInfo(userDTO);
        if (one == null) {
            one = new User();
            BeanUtil.copyProperties(userDTO, one, true);
            save(one);//存到数据库
        } else {
            throw new ServerException(Constants.CODE_600, "用户已存在");
        }
        return one;
    }

在前端执行成功之后,我们数据库里面的数据就发生了变化

SpringBoot实现Md5对数据库数据加密

        那我们在注册的时候进行了数据加密,那我们登录不解密就寄了,咋们就会登录不了,这不是乱写嘛,别急,马上进行解密实现登录操作。

SpringBoot实现Md5对数据库数据加密

        没想到吧,是跟注册差不多的操作。那有人问你这里注释写的是MD5加密,你的解密去哪里了呢?这不是胡扯嘛!!!

SpringBoot实现Md5对数据库数据加密

        其实我们的SecureUtil不仅可以进行加密,也可以进行解密,所以我们在登录的时候要获取我们的用户密码,就是直接进行解密操作,供我们的操作使用。所以说Hutool这个工具实在是真的强大,帮我们解决很多复杂的程序。

下面给大家分享一下AES

AES算法简介

        AES算法全称Advanced Encryption Standard,又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
AES支持三种长度的密钥:128位,192位,256位。

AES算法原理

1.密钥

        密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。
AES支持三种长度的密钥:128位,192位,256位
平时大家所说的AES128,AES192,AES256,实际上就是指的AES算法对不同长度密钥的使用。

2.填充

        要想了解填充的概念,我们先要了解AES的分组加密特性。什么是分组加密呢?我们来看看下面这张图:AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit。
        这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果。
        假如一段明文长度是192bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding)。

依然是我们的SecureUtil来进行加密解密处理

SpringBoot实现Md5对数据库数据加密

最后控制台输出结果为:

SpringBoot实现Md5对数据库数据加密

好了,以上就是我近期学习的结果,可以进行数据库数据加密解密。

⛵小结

        以上就是对SpringBoot实现Md5对数据库数据加密简单的概述,后面会陆续更新其他的内容,请持续关注!!! 

SpringBoot实现Md5对数据库数据加密

        如果这篇文章有帮助到你,希望可以给作者点个赞👍,创作不易,如果有对后端技术、前端领域感兴趣的,也欢迎关注 ,我将会给你带来巨大的收获与惊喜💝💝💝文章来源地址https://www.toymoban.com/news/detail-494444.html

到了这里,关于SpringBoot实现Md5对数据库数据加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 实现 MD5 加密算法

    1.1 MD5 算法介绍 MD5 消息摘要算法,英文:MD5 Message-Digest Algorithm ,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 MD5 是单向加密不可逆的,也就是常说的非对称加密,常用于用户密码的加密,这样即使密

    2024年02月09日
    浏览(55)
  • Groovy 基于Groovy实现MD5加密

    groovy 3.0.7 说明:如果在JAVA中运行,则需要修改 为 === 提示文字过少,占位行 === 提示文字过少,占位行

    2024年02月06日
    浏览(67)
  • JavaScript实现MD5加密的6种方式

    关于MD5: MD5.js是通过前台js加密的方式对用户信息,密码等私密信息进行加密处理的工具,也可称为插件。 在本案例中 可以看到MD5共有6种加密方法: 1, hex_md5(value) 2, b64_md5(value) 3, str_md5(value) 4, hex_hmac_md5(key, data) 5, b64_hmac_md5(key, data) 6, str_hmac_md5(key, data)   测试

    2024年02月05日
    浏览(55)
  • JavaScript实现MD5 加密的6中方式

      关于MD5: MD5.js是通过前台js加密的方式对用户信息,密码等私密信息进行加密处理的工具,也可称为插件。 在本案例中 可以看到MD5共有6种加密方法: 1, hex_md5(value) 2, b64_md5(value) 3, str_md5(value) 4, hex_hmac_md5(key, data) 5, b64_hmac_md5(key, data) 6, str_hmac_md5(key, data) 测试

    2024年02月14日
    浏览(49)
  • 030:vue中使用md5进行数据加密示例

    第030个 查看专栏目录: VUE ------ element UI 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeMount,mounted, beforeUpdate,upda

    2024年02月09日
    浏览(44)
  • JMeter处理接口签名之BeanShell实现MD5加密

    项目A需要给项目B提供一个接口,这个接口加密了,现在需要测试这个接口,需要怎么编写脚本呢?实现接口签名的方式有两种: BeanShell实现MD5加密和 函数助手实现MD5加密, 之前已经分享过了函数助手实现MD5加密 ,今天就来分享下BeanShell实现MD5加密。 一、接口信息 POST /a

    2024年02月14日
    浏览(54)
  • Android下实现字符串或文件的MD5加密

    MD5-信息摘要算法简单介绍 MD5 (Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 计算出来的MD5值是有可能重复的,但是概率很低。 加密过程几乎不可逆,除非维护一个庞大的Key-Val

    2024年02月15日
    浏览(49)
  • 小程序,h5,移动端处理md5加密接口,请求数据加密方式AES-128-ECB

    1.AES-128-ECB 表示使用AES(Advanced Encryption Standard)算法,密钥长度为128位,工作模式为ECB(Electronic Codebook)的一种对称加密方式。 其中: AES是一种常用的对称加密算法,被广泛地应用于各种信息安全场景中。 128表示密钥长度为128位(16字节)。AES支持的密钥长度还有192位和256位。 ECB代表电

    2024年03月28日
    浏览(49)
  • 前端如何加密数据--五种方式(base64加密、md5加密、sha1加密、字符串方法加密、AES加密)

    1.base64加密(包括小写字母a-z、大写字母A-Z、数字0-9、符号\\\"+\\\"、\\\"/\\\"一共64个字符的字符集,另加一个“=”,实际是65个字符) 字符串转换为base64:str64 = window.btoa(str) base64转换为字符串:str=window.atob(str64) 2.md5加密 3.sha1加密   4.字符串的编码和解码(JS函数的escape()和unescape())

    2024年02月16日
    浏览(59)
  • uniapp使用md5加密 js使用md5加密

    文章的初衷 最近项目中使用了md5加密,为了方便还不明白怎么使用的朋友参考查阅,当然也为了方便博主再次使用所写 md5加密说明 可在不同平台使用 因为使用方法是js方法去调用的所以不局限于某个平台 我这里使用的方式是登录的时候进行加密,具体其他的使用方式,朋友们自

    2024年02月07日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包