我是靠谱客的博主 天真高山,最近开发中收集的这篇文章主要介绍PBKDF2Util加密,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

package com.archermind.cloud.phone.baseline.common.utils.algo;
import cn.hutool.crypto.symmetric.PBKDF2;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
/**
* PBKDF2工具类
*
* @author cyc
* @version 2022/10/21 0021
* @see [相关类/方法]
*/
public class PBKDF2Util
{
private PBKDF2Util ()
{
}
/**
* 算法名称
*/
private static final String ALGORITHM = "PBKDF2WithHmacSHA256";
/**
* 生成密文的长度
*/
private static final Integer KEY_LENGTH = 512;
/**
* 迭代次数
*/
private static final Integer ITERATION_COUNT = 10000;
/**
* 盐的长度
*/
public static final Integer SALT_BYTE_SIZE = 32 / 2;
/**
* PBKDF2加密
*
* @param password 待加密的密码
* @param salt
盐
* @return 加密后的密文
*/
public static String encrypt (String password, byte[] salt)
{
PBKDF2 pbkdf2 = new PBKDF2 (ALGORITHM, KEY_LENGTH, ITERATION_COUNT);
return pbkdf2.encryptHex (password.toCharArray (), salt);
}
/**
* 构造随机数盐值
*
* @return 盐值
* @throws NoSuchAlgorithmException 算法不存在异常
*/
public static byte[] generateSalt () throws NoSuchAlgorithmException
{
SecureRandom random = SecureRandom.getInstance ("SHA1PRNG");
byte[] salt = new byte[SALT_BYTE_SIZE];
random.nextBytes (salt);
return salt;
}
}
package com.archermind.cloud.phone.baseline.common.utils.auth;
import cn.hutool.core.util.HexUtil;
import com.archermind.cloud.phone.baseline.common.utils.algo.PBKDF2Util;
import lombok.extern.slf4j.Slf4j;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
/**
* 密码工具类
*
* @author cyc
* @version 2022/10/21 0021
* @see [相关类/方法]
*/
@Slf4j
public class PasswordUtil
{
private PasswordUtil ()
{
}
/**
* 验证密码是否一致
*
* @param password
明文密码
* @param encryptedPwd 加密后的密码
* @return true 密码一致 false 密码不一致
*/
public static boolean verifyPassword (String password, String encryptedPwd)
{
// 没有密码场景
if (encryptedPwd == null)
{
return false;
}
String[] splitArray = encryptedPwd.split ("\$");
if (splitArray.length != 2)
{
return false;
}
return splitArray[1].equals (PBKDF2Util.encrypt (password, splitArray[0].getBytes (StandardCharsets.UTF_8)));
}
/**
* PBKDF2加密密码(salt$password)
*
* @param password 明文密码
* @return 加密后的密码
*/
public static String encryptPassword (String password)
{
try
{
String salt = HexUtil.encodeHexStr (PBKDF2Util.generateSalt ());
String encryptResult = PBKDF2Util.encrypt (password, salt.getBytes (StandardCharsets.UTF_8));
return String.format ("%s$%s", salt, encryptResult);
}
catch (NoSuchAlgorithmException e)
{
log.error ("encryptPassword exception : ", e);
}
return null;
}
}

//使用

	// 4、校验密码
boolean verifyPasswordR = PasswordUtil.verifyPassword (password, sysOperator.getPassword ());
	//获取用户密码 进行加密
String encryptPassword = PasswordUtil.encryptPassword (password);

最后

以上就是天真高山为你收集整理的PBKDF2Util加密的全部内容,希望文章能够帮你解决PBKDF2Util加密所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(22)

评论列表共有 0 条评论

立即
投稿
返回
顶部