当前位置: 首页 > news >正文

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

前言

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

🛠️先来看看什么是MD5:

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

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

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

  2. 总体看看后端代码

@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate 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. 不建议直接用于现代系统的密码加密
http://www.dtcms.com/a/275628.html

相关文章:

  • LangChain极速入门:用Python构建AI应用的新范式
  • [特殊字符]LabelMe标注转PaddleSeg数据集:多类掩码自动生成+配置文件输出(附完整Python脚本)
  • Apache Iceberg数据湖高级特性及性能调优
  • 玩转rhel9 Apache
  • linux 系统找出磁盘IO占用元凶 —— 筑梦之路
  • Java零基础笔记12(Java编程核心:面向对象编程高级{常用API、GUI编程})
  • PyTorch多层感知机模型构建与MNIST分类训练
  • 【BurpSuite 2025最新版插件开发】基础篇10(完):日志记录与调试
  • 请求服务端获取broker的机房归属信息异常
  • 剑指offer56_数组中唯一只出现一次的数字
  • JavaScript加强篇——第七章 浏览器对象与存储要点
  • NLP:RNN文本生成案例分享
  • 关于 验证码系统 详解
  • S7-200 SMART PLC:硬件、原理及接线特点全解析
  • Transformer基础
  • Linux驱动09 --- 环境搭建
  • 零基础 “入坑” Java--- 九、类和对象(二)
  • 【YOLOv8-obb部署至RK3588】模型训练→转换RKNN→开发板部署
  • 详解梯度消失和梯度爆炸(反向传播)?
  • 2025年亚太杯(中文赛项)数学建模B题【疾病的预测与大数据分析】原创论文讲解(含完整python代码)
  • 【Java入门到精通】(三)Java基础语法(下)
  • # win11 连接共享打印机报错:0x00000040 或者 0x00000709或者 x0000011b 的解决方法
  • ubuntu系统宝塔进程守护管理器开机启动失败问题
  • 设计模式:单一职责原则
  • 注解驱动的知识中枢:MCPServer赋能AI业务的技术架构与实践
  • Mastercam 2026中文版网盘资源下载与安装教程共享
  • JAVA--双亲委派机制
  • 历史数据分析——云南白药
  • Matplotlib 全面使用指南 -- 紧密布局指南 Tight layout guide
  • Leetcode力扣解题记录--第3题(滑动窗口)