JavaWeb(苍穹外卖)--学习笔记05(MD5)

发布于:2025-07-14 ⋅ 阅读:(23) ⋅ 点赞:(0)

前言

本片文章是学习B站黑马程序员苍穹外卖的学习笔记。我的学习路线是Java基础语法-JavaWeb-做项目,外卖程序的开发还是比我之前学JavaWeb图书管理系统多很多功能的,其登录功能加入了MD5密码加密🙌(其实这段我也没太听懂,我又结合ai理解了一下 )。

🛠️先来看看什么是MD5:

MD5:是一种常用的哈希算法,用于生成数据的“指纹”对密码加密。

🙌在来看看其在项目中的使用:

  1. 因为是对密码的加密,所以更改数据库中的密码改为加密后的:
    123456—> e10adc3949ba59abbe56e057f20f883e

  2. 总体看看后端代码

@Service
public class EmployeeServiceImpl implements EmployeeService {

    @Autowired
    private EmployeeMapper employeeMapper;

    public Employee login(EmployeeLoginDTO employeeLoginDTO) {
        String username = employeeLoginDTO.getUsername();
        String password = employeeLoginDTO.getPassword();

        //1、根据用户名查询数据库中的数据
        Employee employee = employeeMapper.getByUsername(username);

        //2、处理各种异常情况(用户名不存在、密码不对、账号被锁定)
        if (employee == null) {
            //账号不存在
            throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);
        }

        //密码比对
        // TODO 后期需要进行md5加密,然后再进行比对
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        



if (!password.equals(employee.getPassword())) {
            //密码错误
            throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
        }

        if (employee.getStatus() == StatusConstant.DISABLE) {
            //账号被锁定
            throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED);
        }

        //3、返回实体对象
        return employee;
    }

从在service层的位置可以看出,其作用其实就是,在后端收到前端用户输入的密码后,把用户的密码进行加密后处理,再和数据库中存储的密码对比

🧠 分步解析:我们来逐行解释这段代码

password = DigestUtils.md5DigestAsHex(password.getBytes());
  1. password.getBytes()

作用:把字符串(比如 “123456”)转换成字节数组(byte[]),因为加密算法操作的是二进制数据。

"hello".getBytes()[104, 101, 108, 108, 111]
  1. DigestUtils.md5DigestAsHex(…)

作用:使用 Apache Commons Codec 提供的 DigestUtils 工具类,对传入的字节数组进行 MD5 哈希计算,并将结果转为 16 进制字符串

String password = "123456";
String md5 = DigestUtils.md5DigestAsHex(password.getBytes());
System.out.println(md5); // 输出:e10adc3949ba59abbe56e057f20f883e

⚠️ ai还给出了缺点(可能这个外卖的课是几年前的所以还是有点落后的):

  1. 存在碰撞攻击风险
  2. 容易被彩虹表破解(尤其是弱密码)
  3. 不建议直接用于现代系统的密码加密

网站公告

今日签到

点亮在社区的每一天
去签到