saas-export项目---shiro框架加盐加密

本文介绍了如何在Shiro框架中实现加盐加密,以增强密码安全性,防止彩虹表攻击。通过编写代码对密码加盐加密,创建自定义凭证匹配器,配置`applicationContext-shiro.xml`,并在业务层中确保在用户密码存储和更新时使用加密方法。
摘要由CSDN通过智能技术生成

shiro框架加盐加密

  • 将明文加密成密文保存,账号保存在数据库中是需要加密码的
  • 如果只是单纯使用md5或sha1进行加密,容易被人利用"彩虹表"撞库来破解密码,导致密码不安全!这时可以进行加盐加密来解决。
  • (1)编写代码对密码加盐加密
    (2)编写自定义凭证匹配器
    (3)在applicationContext-shiro.xml,添加自定义凭证匹配器
    (4)业务层添加条件
  • 在添加用户时,密码进行加盐加密存储到数据库
  • 还可以在数据库中直接修改加密密码
    update pe_user set password=md5('123') where email= 'lw@export.com';

Test

public class TestMD5 {
    public static String stringMd5(String plainText){//定义一个明文参数
        byte[] secretBytes=null;
        try {
            secretBytes= MessageDigest.getInstance("md5").digest(plainText.getBytes());//对明文的字节进行摘要
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有这个算法");
        }
        String md5code=new BigInteger(1,secretBytes).toString(16);//16位
        for (int i = 0; i < 32-md5code.length(); i++) {
            md5code="0"+md5code;
        }
        return md5code;
    }
    @Test
    public void test01(){
        String result=TestMD5.stringMd5("123");
        System.out.println(result);
    }
    @Test
    public void test02(){
        Md5Hash md5Hash=new Md5Hash("123");
        System.out.println(md5Hash);
    }
}

工具类CustomCredentialsMatcher

public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {
    private Logger l= LoggerFactory.getLogger(this.getClass());
    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info){
        UsernamePasswordToken t= (UsernamePasswordToken) token;
        String eamil=t.getUsername();
        String pwd1=new String(t.getPassword());
        l.info("pwd1=="+pwd1);
        Md5Hash md5Hash=new Md5Hash(pwd1,eamil);
        pwd1=md5Hash.toString();
        l.info("pwd1=="+pwd1);

        String pwd2= (String) info.getCredentials();
        l.info("pwd2=="+pwd2);
        if(pwd1.equals(pwd2)){
            return true;
        }else{
            return false;
        }
    }
}

applicationContext-shiro.xml

    <bean id="credentialsMatcher2" class="com.dsf.web.util.CustomCredentialsMatcher">
    </bean>
    <bean id="authRealm" class="com.dsf.web.shiro.AuthRealm">
        <property name="credentialsMatcher" ref="credentialsMatcher2"/>
    </bean>

UserServiceImpl

 	@Override
    public void saveUser(User user) {
        String uuid= UUID.randomUUID().toString();
        user.setUserId(uuid);
        if (user.getPassword()!=null){
            Md5Hash md5Hash=new Md5Hash(user.getPassword(),user.getEmail());
            user.setPassword(md5Hash.toString());
        }

        iUserDao.save(user);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值