使用Shiro的SimpleHash加密密码工具类

 

版权声明:严禁用于任何商业用途的转发!

为什么我们要使用shiro的加密工具再次封装密码:

绝大多数网站中的用户密码使用MD5加密后保存到数据库中,如果采用弱密码,例如:123456、admin等,有太多的MD5穷举网站可以获取到密码的MD5值,这个时候我们有必要改进密码加密机制!

Shiro的SimpleHash并非唯一选择,只是比较方便。

SimpleHash原理:

public SimpleHash(String algorithmName, Object source, Object salt, int hashIterations)

algorithmName:加密形式(具体支持哪些算法,请自行百度)

source:简单理解就是传入的原始明文密码值

salt:盐值

hashIterations:加密次数

最终得到加密的密码 = MD5(明文密码 + 盐值)* 加密次数

1. 引入Shiro

<!--shiro-->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.4.2</version>
</dependency>
package org.bluedream.core.utils;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import org.bluedream.core.module.sys.entity.User;

public class PasswordHelper {
    // 加密形式
    public static final String ALGORITHM_NAME = "MD5";
    // 加密次数
    public static final int HASH_ITERATIONS = 128;

    private PasswordHelper(){
        throw new AssertionError();
    }

    /**
     * 返回MD5加密后的字符串
     * @param sourcePWD  原始密码文本
     * @param salt       盐值
     * @return
     */
    public static String encryptPassword(String sourcePWD , String salt){
        return new SimpleHash(ALGORITHM_NAME , sourcePWD , ByteSource.Util.bytes(salt) , HASH_ITERATIONS).toHex();
    }

    /**
     * User对象加密
     * @param user
     * @return
     */
    public static String encryptPassword(User user){
        return encryptPassword(user.getPassword() , user.getLoginCode());
    }

    /**
     * test return new password
     * @param args
     */
    public static void main(String[] args) {
        String pwd = "123456";
        String salt = "system";
        System.out.println(encryptPassword(pwd , salt));
    }
}

 

 

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值