美文网首页
SpringBoot整合shiro-MD5盐值加密

SpringBoot整合shiro-MD5盐值加密

作者: pedro7 | 来源:发表于2020-05-24 17:48 被阅读0次

    为什么要进行密码加密?

    在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是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

    相关文章

      网友评论

          本文标题:SpringBoot整合shiro-MD5盐值加密

          本文链接:https://www.haomeiwen.com/subject/fhujahtx.html