Shiro身份认证&&md5加盐加密

目录

一、盐加密

        1.1 数据库密码的发展史

        1.2 盐加密工具类演示

        1.3 利用盐加密实现注册功能

二、Shiro身份认证

        2.1 完成登录的方法(Mapper层、Biz层)

        2.2 完成自定义Realm(重点)

        2.3 Spring与Shiro的整合

        2.4 前端页面

        2.5 测试


一、盐加密

        1.1 数据库密码的发展史

第一阶段:明文密码  123456

第二阶段:md5加密   e10adc3949ba59abbe56e057f20f883e

第三阶段:md5加盐加密

第四阶段:md5加盐加密加次数

加盐加密:根据随机生成的盐(盐可能就是代表某个数字)

                  改变原来的md5加密过的密码,相当于再次加密; 

加次数:加次数就是给这串密码一步步的进行多次加盐加密,极大的提高了密码的安全性;

我们可以看到,数据库密码的发展史让着我们的密码越来越安全,这也极大的保障了用户数据的安全性,就算数据泄露也让别人无处下手。 

        1.2 盐加密工具类演示

                接下来我们就通过一个密码工具类来演示一下加盐加密;

        但是在这之前我们还需要导入工具类需要的Shiro框架的相关pom依赖;

        ① 导入pom依赖:

<dependency>    
    <groupId>org.apache.shiro</groupId>    
    <artifactId>shiro-core</artifactId>    
    <version>1.3.2</version>
</dependency>
<dependency>    
    <groupId>org.apache.shiro</groupId>    
    <artifactId>shiro-web</artifactId>    
    <version>1.3.2</version>
</dependency>
<dependency>    
    <groupId>org.apache.shiro</groupId>    
    <artifactId>shiro-spring</artifactId>    
    <version>1.3.2</version>
</dependency>

        再一个就是在web.xml中配置shiro过滤器;

       web.xml

<!-- shiro过滤器定义 -->
<filter>
  <filter-name>shiroFilter</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  <init-param>
    <!-- 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 -->
    <param-name>targetFilterLifecycle</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>shiroFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

         PasswordHelper:加盐加密工具类

package com.leaf.shiro;


import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;

/**
 * 用于shiro权限认证的密码工具类
 */
public class PasswordHelper {

    /**
     * 随机数生成器
     */
    private static RandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator();

    /**
     * 指定hash算法为MD5
     */
    private static final String hashAlgorithmName = "md5";

    /**
     * 指定散列次数为1024次,即加密1024次
     */
    private static final int hashIterations = 1024;

    /**
     * true指定Hash散列值使用Hex加密存. false表明hash散列值用用Base64-encoded存储
     */
    private static final boolean storedCredentialsHexEncoded = true;

    /**
     * 获得加密用的盐
     *
     * @return
     */
    public static String createSalt() {
        return randomNumberGenerator.nextBytes().toHex();
    }

    /**
     * 获得加密后的凭证
     *
     * @param credentials 凭证(即密码)
     * @param salt        盐
     * @return
     */
    public static String createCredentials(String credentials, String salt) {
        SimpleHash simpleHash = new SimpleHash(hashAlgorithmName, credentials,
                salt, hashIterations);
        return storedCredentialsHexEncoded ? simpleHash.toHex() : simpleHash.toBase64();
    }


    /**
     * 进行密码验证
     *
     * @param credentials        未加密的密码
     * @param salt               盐
     * @param encryptCredentials 加密后的密码
     * @return
     */
    public static boolean checkCredentials(String credentials, String salt, String encryptCredentials) {
        return encryptCredentials.equals(createCredentials(credentials, salt));
    }

    public static void main(String[] args) {
        //盐
        String salt = createSalt();
        System.out.println(salt);
        System.out.println(salt.length());
        //凭证+盐加密后得到的密码
        String credentials = createCredentials("123456", salt);
        System.out.println(credentials);
        System.out.pri
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Leaf1217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值