本文主要是介绍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容器
//密码加密算法设置@Beanpublic HashedCredentialsMatcher hashedCredentialsMatcher(){HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();//设置加密方式hashedCredentialsMatcher.setHashAlgorithmName("md5");//设置散列的次数hashedCredentialsMatcher.setHashIterations(2);return hashedCredentialsMatcher;}
2、realm中设置开启加密
@Beanpublic UserRealm userRealm(){//注入realmUserRealm 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盐值加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!