springboot thymeleaf和shiro 整合 第三篇 密碼加鹽
import java.util.UUID;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import org.hibernate.boot.archive.scan.internal.PackageDescriptorImpl;
/**
* encodePassword 方法
* 即是加密密碼明文的方法,該方法的引數除了明文密碼 還有salt 這個是鹽
* 通過這個鹽,可以對密碼進一步加密,而這個鹽,這裡其實使用的是userId
* 是通過UUID獲取的一個隨機的字串,作為使用者記錄主鍵userid的值
* 然後它們兩個通過encodePassword 方法生成密碼暗文
*
*/
public class PasswordUtil {
private String algorithmName = "md5"; //指定雜湊演算法為MD5,還有別的演算法如:SHA256、SHA1、SHA512
private int hashIterations = 2; //雜湊迭代次數 md5(md5(pwd)): new Md5Hash(pwd, salt, 2).toString()
public void setAlgorithmName(String algorithmName) {
this.algorithmName = algorithmName;
}
public void setHashIterations(int hashIterations) {
this.hashIterations = hashIterations;
}
//加密:輸入明文得到密文
public String encodePassword(String pwd, String salt) {
//user.setSalt(randomNumberGenerator.nextBytes().toHex());
String newPassword = new SimpleHash(
algorithmName,
pwd,
ByteSource.Util.bytes(salt),
hashIterations).toHex();
return newPassword;
}
public boolean verifyPassword(String targetPassword, String pwd, String salt){
String newPassword = this.encodePassword(targetPassword, salt);
if(newPassword.equals(pwd)){
return true;
}else{
return false;
}
}
public static void main(String[] args) {
//salt 鹽
String uuid=UUID.randomUUID().toString().replace("-", "");
System.out.println("uuid:"+uuid);
//admin8d78869f470951332959580424d4bf4f
//密碼+鹽
String eString=new PasswordUtil().encodePassword("123456", "admin8d78869f470951332959580424d4bf4f");
System.out.println(eString);
}
}