package com.hao.util;
import com.hao.util.password.ShaEncoder;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Strings.emptyToNull;
/**
* Created by user on 2016/2/24.
*/
public class PasswordUtil {
private PasswordUtil(){}
/**
* 密码加密的工具类 用来生成一个不可逆的加密字符串和盐值
* @param rawPassword 未加密的密码
* @return 加密后的密码
*/
public static Pair<String,String> encodePassword(String rawPassword) {
String salt = generateSalt(null);
return ImmutablePair.of(encodePassword(rawPassword,salt),salt);
}
public static boolean isPasswordVaild(String rawPassword, String encryptedPassword, String salt) {
return encodePassword(rawPassword,salt).equals(encryptedPassword);
}
/**
* 用来生成一个不可逆的加密字符串
* @param rawPassword 未加密的密码
* @param salt 盐值
* @return 加密后的密码
*/
public static String encodePassword(String rawPassword,String salt) {
ShaEncoder encoder = new ShaEncoder(512);
return encoder.encodePassword(checkNotNull(emptyToNull(rawPassword),"待加密的密码"),checkNotNull(emptyToNull(salt),"加密盐值"));
}
/**
* 按照给定长度生成指定的随机字符串作为盐值
* @param length
* @return
*/
public static String generateSalt(Integer length) {
return RandomStringUtils.randomAlphanumeric(length == null ? 32 : length);
}
}