SpringBoot整合shiro-MD5盐值加密
为什么要进行密码加密?
在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客。显然后果将不堪设想。使用密码加密可以有效地增加黑客破解密码的难度,提高安全性。
什么是md5加密和md5盐值加密?
- md5加密:
明文密码 + md5算法 = 密文密码 - md5盐值加密
盐值处理后的明文密码 + md5算法 = 密文密码
盐值可以由开发者进行自定义,这样密码被破解的可能性就有了显著的降低。
下面演示基于SpringBoot框架的shiro实现MD5盐值加密
SpringBoot整合shiro-实现MD5盐值加密
一、数据库中应有一个字段用于储存盐值

二、数据表映射的实体类中应有盐值属性
package com.pedro.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private int id;
private String username;
private String password;
private String perms;
private String salt;
}
User.java
三、ShiroConfig中设置加密方式
1、设置加密算法并用@Bean标签注入Spring容器
//密码加密算法设置
@Bean
public HashedCredentialsMatcher hashedCredentialsMatcher(){
HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
//设置加密方式
hashedCredentialsMatcher.setHashAlgorithmName("md5");
//设置散列的次数
hashedCredentialsMatcher.setHashIterations(2);
return hashedCredentialsMatcher;
}
2、realm中设置开启加密
@Bean
public UserRealm userRealm(){
//注入realm
UserRealm userRealm = new UserRealm();
//注入密码加密
userRealm.setCredentialsMatcher(hashedCredentialsMatcher());
return userRealm;
}
四、修改realm类中的认证方法

那么注册用户时如何对用户设置的密码进行加密呢?
一、可以准备一个用于加密的工具方法
public class PasswordGenerateUtil {
public static String getPassword(String username, String password, String salt, int hashTimes) {
//利用传入的信息进行加密,得到密文
Md5Hash md5Hash = new Md5Hash(password, username + salt, hashTimes);
//返回密文
return md5Hash.toString();
}
}
二、注册用户时注意
- 向数据库中存入用户信息时调用工具方法,加密密码再存入
- 存入用户信息时候记得把盐值也存进去
String salt1 = Long.toString(System.currentTimeMillis());
注意事项:
- 加密密码时设置的盐值处理方式必须和realm中存入info时的盐值处理方式设置得一样
- 加密时的散列次数必须和ShiroConfig中加密算法的bean中设置的一样
2020-5-24
SpringBoot整合shiro-MD5盐值加密的更多相关文章
- shiro密码的比对,密码的MD5加密,MD5盐值加密,多个Relme
有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容 密码的比对 通过AuthenticatingRealm的CredentialsMatcher方法 密码的加密 ...
- SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理|前后端分离(下)----筑基后期
写在前面 在上一篇文章<SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期>当中,我们初步实现了SpringBoot整合Shiro ...
- c# MD5盐值加密
using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...
- SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期
写在前面 通过前几篇文章的学习,我们从大体上了解了shiro关于认证和授权方面的应用.在接下来的文章当中,我将通过一个demo,带领大家搭建一个SpringBoot整合Shiro的一个项目开发脚手架, ...
- Spring Security中的MD5盐值加密
在 spring Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字 ...
- MD5盐值加密
加密思路 思路解析:(数据解析过程基于16进制来处理的,加密后为16进制字符串) 加密阶段: 对一个字符串进行MD5加密,我们需要使用到MessageDigest(消息摘要对象),需要一个盐值(sal ...
- shiro 密码的MD5盐值加密
- c# MD5及盐值加密
using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography;u ...
- springboot系列(十)springboot整合shiro实现登录认证
关于shiro的概念和知识本篇不做详细介绍,但是shiro的概念还是需要做做功课的要不无法理解它的运作原理就无法理解使用shiro: 本篇主要讲解如何使用shiro实现登录认证,下篇讲解使用shiro ...
随机推荐
- 【Oracle】add_months()函数介绍
add_months 函数主要是对日期函数进行操作,举例子进行说明 add_months 有两个参数,第一个参数是日期,第二个参数是对日期进行加减的数字(以月为单位的) 如:3个月以后的时间,可以用下 ...
- 基础练习(上) - 蓝桥杯(Python实现)
闰年判断: 题目: 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 1. 年份是4的倍数而不是100的倍数 ...
- online创建索引中途取消导致索引无法删除解决办法
问题:有一个表ID栏位没有索引,但是在一个update语句的where中被使用,因此打算online创建索引,但是长时间没有成功,此时决定取消,取消后发现索引无法删除 过程: 数据库监控报警有行锁,进 ...
- JS编写的科学计算器
最近半个月编写了一个JS+CSS+HTML的网页计算器,从最初的具有简陋界面的简单计算器改版到最终具有科学/标准计算器转换功能并且界面非常友好的计算器,收获良多!总的来说,代码简单,通俗易读,下面贴上 ...
- 0到1:微信后台系统的演进之路 原创 张文瑞 InfoQ 2016-01-14
0到1:微信后台系统的演进之路 原创 张文瑞 InfoQ 2016-01-14
- python_3 装饰器参数之谜
装饰器参数之谜 之前已经初步了解过装饰器了,知道了装饰器可以"偷梁换柱",在不改变函数的调用方式和函数内容的时候,而把函数的功能偷偷地修改. 那么问题来了,如果被修改的函数中有参数 ...
- LOJ10202樱花——数论
题目描述 原题来自:HackerRank Equations 求不定方程: 1/x+1/y=1/n! 的正整数解 (x,y) 的数目. 输入格式 一个整数 n . 输出格式 一个整数,表示有多少对 ( ...
- win10自带输入法突然变成了繁体
有可能是在使用Eclipse/MyEclipse的Ctrl + Shift + F进行代码格式化的时候与输入法的热键冲突了
- 【wp】HWS计划2021硬件安全冬令营线上选拔赛
逆向手在夹缝中艰难求生系列. 这篇真的存粹是做题笔记了,对内核驱动啥的不太懂,pwn也不会,能做出来的题都是硬逆出来的( childre最后死活没整出来,后来看大佬的wp才知道对子进程有修改(.)呜呜 ...
- GeoServer发布Shapfile、PostGIS数据
GeoServer发布Shapfile.PostGIS数据 一.GeoServer发布Shapfile数据 1.1 创建工作区 1.1.1 工作区 1.2 在工作区中加入新的数据存储 1.2.1 数据 ...