这一行干的就是:把用户输进来的明文密码先做一层 MD5 哈希,再把得到的 32 位十六进制字符串存到变量 password
里。
逐段拆开:
-
password.getBytes()
把字符串转成字节数组,MD5 算法只能对字节/字节数组做运算。 -
DigestUtils.md5DigestAsHex(...)
Spring 提供的工具方法,内部流程:- 拿到 MD5 消息摘要实例
MessageDigest.getInstance("MD5")
- 喂入字节数组并计算 128 bit(16 byte)的摘要
- 把 16 个字节按十六进制展开成 32 个字符,例如
"123456"
→"e10adc3949ba59abbe56e057f20f883e"
- 拿到 MD5 消息摘要实例
-
结果再赋回给
password
从此以后,变量password
里就不再是原始密码,而是它的 MD5 值。
为什么要这样做(场景):
- 数据库里不存明文,只存 MD5(或再加盐),降低泄露后的风险。
- 登录校验时把用户输入再算一次 MD5,然后跟库里的比对即可。
注意:
- 单纯 MD5 已不够安全,生产环境建议加盐或使用 BCrypt、PBKDF2、Argon2 等慢哈希算法;
- 这一行只是“把明文变 MD5”,不涉及盐值、迭代次数等加强手段。