SpringBoot整合shiro-MD5盐值加密

为什么要进行密码加密?

在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客。显然后果将不堪设想。使用密码加密可以有效地增加黑客破解密码的难度,提高安全性。

什么是md5加密和md5盐值加密?

  • md5加密:
    明文密码 + md5算法 = 密文密码
  • md5盐值加密
    盐值处理后的明文密码 + md5算法 = 密文密码

盐值可以由开发者进行自定义,这样密码被破解的可能性就有了显著的降低。
下面演示基于SpringBoot框架的shiro实现MD5盐值加密

SpringBoot整合shiro-实现MD5盐值加密

一、数据库中应有一个字段用于储存盐值

数据表.png

二、数据表映射的实体类中应有盐值属性
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类中的认证方法

UserRealm.java

那么注册用户时如何对用户设置的密码进行加密呢?

一、可以准备一个用于加密的工具方法
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

posted @ 2021-01-23 22:37  pedro7  阅读(297)  评论(0编辑  收藏  举报