You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何推导网站邮箱验证token的前缀加密逻辑(涉及MD5算法)

邮箱验证码生成逻辑推导

我正在尝试推导网站发送给新用户的邮箱验证码生成逻辑,在研究相关脚本库时找到了如下代码行:

<a href="{{ route('auth.email.verify', [ 'token' => data_get($user, 'verify_token.token').md5($user->email) ]) }}">

我原本认为校验token的生成规则是verify_token表存储的token值拼接用户邮箱的MD5值,但按该逻辑推导未得到正确结果。目前已知信息如下:

  1. verify_token数据库表中存储的对应token值为:
9bd4e22f70b2cbe99245c71a3502b504a8713951
  1. 实际发送到用户邮箱的完整验证链接为:
example.com/verify?token=1c428d4dc20602f439142feab8f572022c5d960feeceabaae007439eb87933f0846ee30e

我已经推导出该token末尾的eeceabaae007439eb87933f0846ee30e对应的是邮箱batista@gmail.com的MD5值,但无法确定token中该字段之前部分的加密逻辑,请问该如何推导这部分算法?


推导方案

  • 先拆分实际收到的token:移除末尾32位的邮箱MD5段,得到待匹配的前半段值为1c428d4dc20602f439142feab8f572022c5d960f,长度为40位,和数据库存储的原始verify_token长度完全一致,说明原始存储的token经过了一次哈希处理后才参与拼接。
  • 优先验证常见哈希算法:直接对数据库存储的原始token 9bd4e22f70b2cbe99245c71a3502b504a8713951 做SHA-1运算,SHA-1输出刚好是40位十六进制值,对比运算结果和拆分得到的前半段是否一致即可。
  • 排查加盐逻辑:如果直接哈希不匹配,按优先级排查常见拼接规则:
    • 原始token拼接站点配置的全局密钥(你找到的是Laravel框架代码,对应.env文件里的APP_KEY值)
    • 原始token拼接用户的id、注册时间等唯一固定字段
    • 原始token先做大小写转换、顺序翻转等预处理后再哈希
  • 核查框架默认配置:Laravel自带的邮箱验证功能默认会对存储的token做哈希处理,前端下发的是哈希后的值,你可以直接核查站点config/auth.php文件中email_verify相关的哈希开关配置。

内容的提问来源于stack exchange,提问作者Dorbagna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:57:04