PHP md5()函数详解,PHP计算MD5,md5()绕过,md5()漏洞原理剖析

这篇具有很好参考价值的文章主要介绍了PHP md5()函数详解,PHP计算MD5,md5()绕过,md5()漏洞原理剖析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

md5() 可以计算字符串的「MD5散列值」

语法

string md5( $str, raw)

参数

  • $str :需要计算的字符串
  • raw :指定十六进制或二进制输出格式

返回值

计算成功,就返回MD5值;计算失败,就返回false。

1、基础使用

平时使用最多的就是「计算MD5」

实例:

echo md5('hello');

输出:

5d41402abc4b2a76b9719d911017c592

2、输出格式

raw 参数控制输出的「格式」

  • true :16个字符的「二进制格式」
  • false :(默认)32个字符的十六进制格式

如果你在项目中遇到MD5「加密结果不一致」的问题,可以观察两个加密结果的长度是否相同,比如一个结果是16位,而另一个结果是32位,这种情况就可以考虑更换输出格式来解决。

实例:

var_dump(md5('hello', true));
var_dump(md5('hello', false));

输出:

string(16) "]A@*�K*v�q��Œ"
string(32) "5d41402abc4b2a76b9719d911017c592"

3、科学计数法(0e绕过)

md5() 遇到「公式」,会先「运算」,再对运算结果「计算」MD5。

由于0和任何数相乘都等于0,所以0e开头的任何数,其MD5都是相同的。

比如 md5('0e1234'),会先运算成 md5(0),再计算MD5值。

补充:

0e是科学计数法,大小写等价,即 0e 和 0E 的结果相同。
科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式。
格式为:aEb=a×10^b,即a乘以10的b次幂。

实例:

echo md5(0).PHP_EOL;
echo md5(0e123).PHP_EOL;
echo md5(0e456).PHP_EOL;
echo md5(0E456);

输出:

cfcd208495d565ef66e7dff9f98764da
cfcd208495d565ef66e7dff9f98764da
cfcd208495d565ef66e7dff9f98764da
cfcd208495d565ef66e7dff9f98764da

绕过思路1:遇到弱比较( md5(a)==md5(b) )时,可以使用 0e绕过。

实例:

var_dump(md5(0e123) === md5(0e456));
var_dump(md5(0e123) == md5(0e456));

输出:

bool(true)
bool(true)

0e绕过还有一种变体:如果某个字符串的MD5值是0e开头的,在比较时,PHP也会先把它计算成 0,再参与比较。

绕过思路2:遇到若比较( md5(a)==0 ),可以传入QNKCDZO等绕过。

echo md5('QNKCDZO').PHP_EOL;
var_dump(md5('QNKCDZO') == 0);

输出:

0e830400451993494058024219903391
bool(true)

一些MD5值为0e开头的字符串:

QNKCDZO   => 0e830400451993494058024219903391
240610708 => 0e462097431906509019562988736854
s878926199a => 0e545993274517709034328855841020
s155964671a => 0e342768416822451524974117254469
s214587387a => 0e848240448830537924465865611904
s214587387a => 0e848240448830537924465865611904

4、数组类型(数组绕过)

md5() 不能处理数组,数组都返回null。同时会报一个Warning,不影响执行,不用管。

实例:

var_dump(md5([1,2]));
var_dump(md5([3,4]));

输出:

Warning: md5() expects parameter 1 to be string,
NULL
Warning: md5() expects parameter 1 to be string,
NULL

绕过思路:遇到强比较(a===b)时,可以使用数组绕过。GET传参时,以 a[]=1&b[]=2 这种形式传递数组。

实例:

$a = array(1,2,3);
$b = array(4,5,6);

var_dump(md5($a)===md5($b));

输出:

Warning: md5() expects parameter 1 to be string,
Warning: md5() expects parameter 1 to be string,
bool(true)

5、算数运算配合自动类型转换

md5() 遇到运算符,会先运算,再计算结果的MD5值。

实例:

echo md5(1+2).PHP_EOL;
echo md5(3).PHP_EOL;
echo md5(1*2).PHP_EOL;
echo md5(2).PHP_EOL;
echo md5(1&1).PHP_EOL;
echo md5(true);

输出:

eccbc87e4b5ce2fe28308fd9f2a7baf3
eccbc87e4b5ce2fe28308fd9f2a7baf3
c81e728d9d4c2f636f067f89cc14862c
c81e728d9d4c2f636f067f89cc14862c
c4ca4238a0b923820dcc509a6f75849b
c4ca4238a0b923820dcc509a6f75849b

当字符串与数字类型运算时,会将字符串转换成数字类型,再参与运算,最后计算运算结果的MD5值。

实例:

echo md5('1'+2).PHP_EOL;
echo md5(3).PHP_EOL;
echo md5('1'*2).PHP_EOL;
echo md5(2);

输出:

eccbc87e4b5ce2fe28308fd9f2a7baf3
eccbc87e4b5ce2fe28308fd9f2a7baf3
c81e728d9d4c2f636f067f89cc14862c
c81e728d9d4c2f636f067f89cc14862c

6、数值类型

虽然 md5() 要求传入字符串,但传入整数或小数也不会报错;数字相同时,数值型和字符串的计算结果是相同的。

实例:

var_dump(md5(123));
var_dump(md5('123'));
var_dump(md5(10.1));
var_dump(md5('10.1'));

输出:文章来源地址https://www.toymoban.com/news/detail-739553.html

string(32) "202cb962ac59075b964b07152d234b70"
string(32) "202cb962ac59075b964b07152d234b70"
string(32) "88d1955de012defb14b2db6f4797ff20"
string(32) "88d1955de012defb14b2db6f4797ff20"

到了这里,关于PHP md5()函数详解,PHP计算MD5,md5()绕过,md5()漏洞原理剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解MD5算法:原理、应用与安全

    在当今数字化时代,数据安全和完整性变得至关重要。消息摘要算法是一种用于验证数据完整性和安全性的重要工具。在众多消息摘要算法中,MD5(Message Digest Algorithm 5)因其快速、广泛应用和相对较高的安全性而备受关注。本书将深入探讨MD5算法的原理、应用和安全性,帮

    2024年04月11日
    浏览(56)
  • js:spark-md5分片计算文件的md5值

    SparkMD5 is a fast md5 implementation of the MD5 algorithm. 文档 https://github.com/satazor/js-spark-md5 https://www.npmjs.com/package/spark-md5 CDN引入 npm安装 使用方式一: 使用方式二: 计算文件md5值 分片读取文件,并计算md5值 参考 spark.md5.js获取文件的md5值

    2024年02月06日
    浏览(47)
  • vue3利用spark-md5计算文件的md5值

    先要安装spark-md5包: import SparkMD5 from ‘spark-md5’ 看官网:https://github.com/search?q=spark-md5 对于小文件来说通常直接读取其文本文件(字符串),计算其md5。 对于大文件,如果直接readAsText读取,速度则会非常慢,甚至浏览器崩溃,遂利用readAsArrayBuffer(file)读取其二进制来计算m

    2024年02月16日
    浏览(42)
  • windows下利用python计算文件md5值

    centos下利用python查看md5和hadoop上文件md5详情见: https://blog.csdn.net/weixin_47046791/article/details/131198529?spm=1001.2014.3001.5501

    2024年02月09日
    浏览(41)
  • 【MD5】什么是MD5?md5的简要描述

    MD5:英文全称是 Message-Digest Algorithm 5。 中文名为 消息摘要算法第五版。它是消息摘要算法,属于 Hash 算法的一种。 正常情况下,它的结果是一个 长度为 32位 的 16进制 的 字符串 。 也有一些地方会用到 16 位的 MD5的结果,它实际上是从 32位 字符串中取中间的第9位到第24位的

    2024年02月08日
    浏览(50)
  • Linux下使用MD5SUM命令详解

    在Linux操作系统中, md5sum 是一个非常实用的工具,用于生成和校验文件的MD5散列值。MD5是一种广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值,常用来确保数据的完整性和一致性。 1. 生成文件的MD5校验值 例如,我们想要计算文件 example.txt 的MD5值: 运行上述

    2024年03月11日
    浏览(55)
  • window,macOS,Linux计算文件MD5值,java实现例子

    打开命令行工具。在Windows系统中,可以使用\\\"cmd\\\"命令打开命令行窗口;在macOS或Linux系统中,可以使用\\\"Terminal\\\"打开终端。 进入文件所在的目录。使用\\\"cd\\\"命令进入文件所在的目录。 计算文件的MD5哈希值。在命令行中输入\\\"certutil -hashfile 文件名 MD5\\\"命令(Windows系统),或者输入

    2024年02月06日
    浏览(34)
  • macOS - md5 | md5sum

    大文件传输是否完整,你可以使用 md5 进行校验 linux 上使用 md5sum 命令,在macOS 上 md5 命令是和 md5sum 等效的 参考:https://blog.csdn.net/cnds123321/article/details/124946370 Linux macOS Linux - md5sum Usage: md5sum [OPTION]… [FILE]… Print or check MD5 (128-bit) checksums. With no FILE, or when FILE is -, read standard

    2024年01月18日
    浏览(41)
  • linux:md5命令以及md5的使用场景

    MD5广泛用于数据完整性校验和密码存储,它是一种不可逆的加密算法,目前无法解密。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。 在数据完整性校验中,MD5可用于验证数据的完整性。例如,在下载文件后,可以对下载

    2024年02月06日
    浏览(44)
  • uniapp使用md5加密 js使用md5加密

    文章的初衷 最近项目中使用了md5加密,为了方便还不明白怎么使用的朋友参考查阅,当然也为了方便博主再次使用所写 md5加密说明 可在不同平台使用 因为使用方法是js方法去调用的所以不局限于某个平台 我这里使用的方式是登录的时候进行加密,具体其他的使用方式,朋友们自

    2024年02月07日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包