使用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



    org.apache.shiro
    shiro-core
    1.4.2
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));
    }
}

 

 

 

你可能感兴趣的:(使用Shiro的SimpleHash加密密码工具类)