springboot thymeleaf和shiro 整合 第三篇 密码加盐

package com.ruiguang.config;
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);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值