在项目中,总有一些数据需要以密文的形式存储到数据库中,比如用户密码,通过DigestsUtil工具类,我们可以快速得到我们想要的密文密码,以及随机生成的盐(干扰数据)
pom.xml文件中引入相关依赖
<!--shiro-web相关依赖-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.4.0</version>
</dependency>
DigestsUtil类代码如下
此类是通过SHA-1摘要算法加密,可以更改加密算法名称修改加密方式
package com.zyw.seckill.utils;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;
import java.util.HashMap;
import java.util.Map;
/**
* @Author Mr.zhou
* @Date 2021/5/3
* @Description 生成摘要工具类
*/
public class DigestsUtil {
//加密算法名称
public static final String SHA1="SHA-1";
//加密次数
public static final int ITERATIONS=512;
/**
* sha1摘要算法
* @param input 明文字符串
* @param salt 盐(干扰数据)
* @return 加密后的密文字符串
*/
private static String sha1(String input,String salt){
return new SimpleHash(SHA1, input, salt, ITERATIONS).toString();
}
/**
* 随机生成盐
* @return 随机生成Hex格式的盐
*/
private static String generateSalt(){
SecureRandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator();
return randomNumberGenerator.nextBytes().toHex();
}
/**
* 输入明文密码,生成随机盐后,进行摘要加密算法
* @param input 明文密码
* @return 一个存有密文密码和随机生成盐的map集合
*/
public static Map<String,String> entryptPassword(String input){
String salt=generateSalt();
String password = sha1(input, salt);
HashMap<String, String> map = new HashMap<>(2);
map.put("password", password);
map.put("salt", salt);
return map;
}
//测试代码
public static void main(String[] args) {
Map<String, String> map = entryptPassword("123");
System.out.println(map.toString());
}
}