MD5算法加密笔记

MD5是常见的摘要算法。

摘要算法

是指把任意⻓度的输⼊消息数据转化为固定⻓度的输出数据的⼀种密码算法. 摘要算法是 不可逆的, 也就是⽆法解密. 通常⽤来检验数据的完整性的重要技术, 即对数据进⾏哈希计算然后⽐ 较摘要值, 判断是否⼀致. 常⻅的摘要算法有: MD5, SHA系列(SHA1, SHA2等), CRC(CRC8, CRC16, CRC32)

 摘要算法存在的客观问题:

虽然经过MD5加密后的密⽂⽆法解密, 相同的密码经过MD5哈希之后的密⽂是相同的
当存 储⽤⼾密码的数据库泄露后, 攻击者会很容易便能找到相同密码的⽤户, 从⽽降低了破解密码的难度。

 MD5加密思路:

盐本质上就是一个随机的字符串。

我们采⽤为⼀个密码拼接⼀个随机字符串(盐)来进⾏MD5加密,然后我们把盐和MD5加密的密文拼接后存储到数据库。
存储:盐值 + MD5(盐值+password)

 代码: 

import org.springframework.util.DigestUtils;

import java.util.UUID;

public class SecurityUtil {

    /**
     * 加密
     * password 用户注册时输入的密码
     * return: 数据库中存储的信息:  盐值 + md5(明文+盐值)
     */
    public static String encrypt(String password){
        //生成随机盐值
        String salt = UUID.randomUUID().toString().replace("-","");
        //对 明文+盐值  进行MD5加密 =>   md5(明文+盐值)
        String finalPassword = DigestUtils.md5DigestAsHex((password+salt).getBytes());
        //盐值 + MD5(盐值+password)
        return salt+finalPassword;
    }
}
MD5解密思路:
如果⽤户输⼊的密码和盐值⼀起拼接后的字符串经过MD5加密后, 得到的密⽂与数据库存储的密文相同, 我们就认为密码正确。

图解:

代码:

/**
     * 验证密码是否正确
     * @param inputPassword  用户登录时输入的密码
     * @param sqlPassword  数据库中password字段存储的信息   盐值 + md5(明文+盐值)
     * @return
     */
    public static boolean verify(String inputPassword, String sqlPassword){
        if (!StringUtils.hasLength(inputPassword)){
            return false;
        }
        if (sqlPassword==null || sqlPassword.length() !=64){
            return false;
        }
        //获取盐值
        String salt = sqlPassword.substring(0,32);
        //根据用户登录输入的密码和盐值, 进行加密    md5(明文+盐值)
        String finalPassword = DigestUtils.md5DigestAsHex((inputPassword+salt).getBytes());

        return (salt+finalPassword).equals(sqlPassword);
    }


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值