PHP 实现 MD5 16位加密的方法

向北走
向北走
发布时间:2026-10-14| 4人浏览过
原创

PHP 内置的 md5() 函数原生生成的是 32 位十六进制字符组成的哈希串。部分旧版接口或数据库字段限制需要 16 位格式,可通过 substr 函数提取中间段来实现。

理解 16 位 MD5 的实质

标准 MD5 算法输出的哈希值长度为 128 位(bit),转换为十六进制后表现为 32 个字符。
所谓的“16 位 MD5”,并非新的加密算法,而是从完整的 32 位字符串中提取特定位置的 16 个字符。通常推荐提取索引 8 到 15 的中间片段,以保留哈希值的分布均匀性,避免首位或末位固定带来的规律性。

具体操作步骤

第1步:生成基础 32 位 MD5

目的:验证数据是否成功进入加密流程,并确认原始结果。
代码演示:

$originalStr = "admin";
$rawMd5 = md5($originalStr);
echo $rawMd5; // 输出: e10adc3949ba59ab51eeb1f7c2a4b7d8

第2步:截取 16 位字符串

入口:直接使用上一步生成的变量或链式调用。
动作:利用 substr(string $string, int $offset, ?int $length) 函数。
关键参数:
- $offset:设为 8,表示从第 9 个字符开始计数(起始索引为 0)。
- $length:设为 16,指定截取的字符数量。
完整代码:

$originalStr = "admin";
$shortMd5 = substr(md5($originalStr), 8, 16);
echo $shortMd5; // 输出: 49ba59ab51eeb1f7

注意事项与排错

  • 安全性评估:16 位 MD5 仅相当于 64 位哈希强度,存在较高的碰撞风险。建议仅在兼容遗留系统或存储非敏感标识时使用,严禁用于高安全级别密码存储(推荐使用 password_hash)。
  • 索引差异:若您的目标系统规定从第 0 位开始截取(即左侧 16 位),需将偏移量改为 0,即 substr(md5($str), 0, 16)。请务必确认接收端的具体规范。

简要总结

通过 substr(md5($text), 8, 16) 可快速获得标准的 16 位中间片段。该方法无需额外扩展库,执行效率高,是处理兼容性场景的常用方案。

以上就是 PHP 实现 MD5 16位加密的详细内容,更多关于 PHP 安全机制的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。