dtcms插件 matlab 私有云平台 image iis Plupload 安卓项目实战 网络营销视频教程 oracle自增长 windows查看进程命令 maven插件 python输出 python中的join函数 python时间戳 python如何定义变量 java编程 java中的正则表达式 java运算 java输出当前时间 java接口的实例 java集合框架图 超级煎蛋卷 在线pr序列设置 彻底删除mysql big5 linux多线程编程 蓝牙测试软件 微信砍价软件 spss20安装教程 python列表求和 apihook 深入解析windows操作系统 cad乘号 flushdns lol无限视野 爱奇艺视频下载到电脑 如何查看端口是否开放 ps怎么做印章效果 qupzilla 寒冰之王
当前位置: 首页 > 学习教程  > 编程语言

MD5&加盐&BCrypt盐值加密

2020/8/31 15:13:28 文章标签:

  • MD5
    • Message Digest algorithm 5,信息摘要算法
      • 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
      • 容易计算:从原数据计算出MD5值很容易。
      • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
      • 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
      • 不可逆
  • 加盐
    • 通过生成随机数与MD5生成字符串进行组合
    • 数据库同时存储MD5值与salt值。验证正确性时使用salt进行MD5即可
   @Test
    void contextLoads() {
        //1.直接使用md5给明文加密
        //抗修改性:e10adc3949ba59abbe56e057f20f883e,多次运行结果都一样
        //那么就可以暴力破解了,直接往数据库里存,123456->e10adc3949ba59abbe56e057f20f883e
        //以后有人拿到e10adc3949ba59abbe56e057f20f883e,去库里一查就知道是123456
        //比如网站:https://cmd5.com/
        //因此,MD5不能直接进行密码的加密存储
        String s = DigestUtils.md5Hex("123456");
        System.out.println(s);

        //2.盐值加密
        //把密码经过盐值加密,表中,表多添加一个盐值的字段,用于存储盐值
        //查询的时候,先获取盐值,再给加密,获取到加密的结果再和数据库里的密码比较
        System.out.println(Md5Crypt.md5Crypt("123456".getBytes(),"$1$qqqqqqqq"));

        //3.盐值加密,要往数据库里添加字段,挺麻烦的。实际项目中应该使用这个
        //Spring提供了一个工具BCrypt,密码编码器
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        //$2a$10$GT0TjB5YK5Vx77Y.2N7hkuYZtYAjZjMlE6NWGE2Aar/7pk/Rmhf8S
        //$2a$10$cR3lis5HQQsQSSh8/c3L3ujIILXkVYmlw28vLA39xz4mHDN/NBVUi
        //每次加密都不一样
        String encode = bCryptPasswordEncoder.encode("123456");
        //盐值都不知道,怎么进行对比呢?
        boolean matches = bCryptPasswordEncoder.matches("123456", "$2a$10$GT0TjB5YK5Vx77Y.2N7hkuYZtYAjZjMlE6NWGE2Aar/7pk/Rmhf8S");

        System.out.println(encode+"==>" + matches);
    }

本文链接: http://www.dtmao.cc/news_show_150336.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?