【谷粒商城之MD5&盐值&BCrypt】

本笔记内容为尚硅谷谷粒商城MD5&盐值&BCrypt部分


加密分为可逆加密和不可逆加密。密码的加密为不可逆加密

 MD5
 • Message Digest algorithm 5,信息摘要算法
 • 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
 • 容易计算:从原数据计算出MD5值很容易。
 • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
 • 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
  不可逆

 @Test
    public void contextLoads() {

        //e10adc3949ba59abbe56e057f20f883e
        //抗修改性:彩虹表。 123456 -> xxxx
        String s = DigestUtils.md5Hex("123456");

        //MD5不能直接进行密码的加密存储:可以被直接暴力破解

        // System.out.println(s);

    }

 

Apache.common下DigestUtils工具类的md5Hex()方法,将MD5加密后的数据转化为16进制

MD5并不是很安全,很多在线网站都可以破解MD5,通过使用彩虹表可以暴力破解。

加盐

 • 通过生成随机数与MD5生成字符串进行组合

 • 数据库同时存储MD5值与salt值。验证正确性时使用salt进行MD5即可 

盐值:随机生成的数

方法1 是加默认盐值:$1$+8位字符

方法2 是加自定义盐值

 //盐值加密:随机值  加盐:$1$+8位字符

        //$1$qqqqqqqq$AZofg3QwurbxV3KEOzwuI1
        //验证: 123456进行盐值(去数据库查)加密
        // String s1 = Md5Crypt.md5Crypt("123456".getBytes(), "$1$qqqqqqqq");
        // System.out.println(s1);

这种方法需要在数据库添加一个专门来记录注册时系统时间的字段,此外还需额外在数据库中存储盐值

使用Spring BCryptPasswordEncoder


加密后的密码存入数据库 下次匹配时,传入的明文密码和加密后的密码它能自动匹配
即使都是同样的密码 ,每次加密后的值也不一样

只要是同一明文加密后出来的值,它就能解析匹配得到。

encode()方法 使用的就是MD5+盐值进行加密,盐值是随机产生的

matches()方法 进行密码是否一致。


        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        //$2a$10$R/VBymW1UA.VzeBedBcspe.iypJIyQiWkka/Ds5SDG7h6r0wQsF6G
        String encode = passwordEncoder.encode("123456");

        boolean matches = passwordEncoder.matches("123456", "$2a$10$R/VBymW1UA.VzeBedBcspe.iypJIyQiWkka/Ds5SDG7h6r0wQsF6G");

        // $2a$10$jLJp4edbLb9pnCg9quGk0u2uvsm4E/6TD5zi1wqHY4jz/f1ydS.LS=>true
        System.out.println(encode+"=>"+matches);

结束!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值