认证服务(6)-密码加密

1. MD5

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
特点:

  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的
  • 容易计算:从原数据计算出MD5值很容易
  • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别
  • 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的
  • 不可逆
    eg:百度网盘的秒传功能实现(对上传文件进行MD5计算得到其值,若该文件以前有人上传到百度网盘,则MD5必定相同,此文件就不会再次上传到百度网盘,与网速无关)

2.加盐

通过生成随机数与MD5生成字符串进行组合
数据库同时存储MD5值与salt值。验证正确性时使用salt进行MD5即可

3.md5代码示例

package com.atguigu.gulimall.member;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.codec.digest.Md5Crypt;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@SpringBootTest
class GulimallMemberApplicationTests {

    @Test
    void contextLoads() {
        //1.md5
        String s = DigestUtils.md5Hex("123456");
        //e10adc3949ba59abbe56e057f20f883e  固定  不安全,有爆破可能
        System.out.println(s);
        String s2 = DigestUtils.md5Hex("123456.");
        //b5be656a7060dd3525027d6763c33ca0  固定  不安全,有爆破可能
        System.out.println(s2);
        System.out.println();

        //2.盐值加密
        // $1$vfjJTD50$JWdwPY7PqUzMyi/x.IhcI0  不固定
        System.out.println(Md5Crypt.md5Crypt("123456".getBytes()));
        //$1$qqqqqqqq$AZofg3QwurbxV3KEOzwuI1  固定  不安全,有爆破可能
        System.out.println(Md5Crypt.md5Crypt("123456".getBytes(),"$1$qqqqqqqq"));
        System.out.println();

        //3.密码加密器
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        //$2a$10$ESJbo9sOwkiZEPaqyRXcBOOId9PFTsiz.bVJN2gcNtv2.087ePQyC  不固定  安全
        String encode = bCryptPasswordEncoder.encode("123456");
        boolean matches = bCryptPasswordEncoder.matches("123456", "$2a$10$GT0TjB5YK5Vx77Y.2N7hkuYZtYAjZjMlE6NWGE2Aar/7pk/Rmhf8S");
        System.out.println(encode+"==>" + matches);
    }
}

运行结果

e10adc3949ba59abbe56e057f20f883e
b5be656a7060dd3525027d6763c33ca0

$1$R3qF7u5k$FMU08YSmh7L/GaK6maF1g0
$1$qqqqqqqq$AZofg3QwurbxV3KEOzwuI1

$2a$10$ESJbo9sOwkiZEPaqyRXcBOOId9PFTsiz.bVJN2gcNtv2.087ePQyC==>true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值