用户密码加密存储和忽略密码返回

最近写一些实际小项目,我以为没什么问题,结果被骂了。主要原因还是我用写练习demo的思路来写的,在用户登录这一块,不仅密码明文储存还把明文密码给暴露了出来。自己学习了一下常见的加密算法,记录一下。


常见的加密算法有很多种,比如SHA-1,Md5,Md5Hash加密算法等。我使用的是Md5Hash的加密算法对密码进行加密,这里也主要介绍Md5Hash的加密算法。其实思路很简单,我们首先产生一个salt值,然后再让这个salt值和用户注册账号时输入的明文密码进行md5hash运算,这里我们不必自己写算法,我们可以引入org.apache.shiro.crypto.hash.Md5Hash这个包,用它提供的方法。


public static String getMd5HashSalt(int length){
        String str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuffer sb=new StringBuffer();
        try{
            //2.  由Random生成随机数
            Random random = SecureRandom.getInstanceStrong();
            //3.  长度为几就循环几次
            for(int i=0; i<length; ++i){
                //从62个的数字或字母中选择
                int number=random.nextInt(62);
                //将产生的数字通过length次承载到sb中
                sb.append(str.charAt(number));
            }
        } catch (NoSuchAlgorithmException e){
            log.error("EncryptionUtil#getMd5HashSalt: message={}",e.getMessage());
            throw new BusinessException(ErrorCodeEnum.DATA_MD5_ERROR);
        }
        //将承载的字符转换成字符串
        return sb.toString();
    }
public static String md5Hash(String password,String salt){
        String md5Password = new Md5Hash(password, salt,2).toString();
        return md5Password;
    }

通过反编译我们看到Md5Hash类这个方法有许多的构造方法
在这里插入图片描述
为了安全我们选择了需要散列值的方法。除此之外,在实际开发中我们返回给前端的数据为了安全是不会返回密码和我们的salt值的,我们可以使用@JsonIgnore这个注解。此注解用于属性或者方法上(最好是属性上),在生成json时不成添加了该注解的属性。
在这里插入图片描述
在这里插入图片描述
我们在postman上可以看到返回的数据就不显示password和salt值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值