md5

(PHP 4, PHP 5, PHP 7, PHP 8)

md5计算字符串的 md5 哈希值

警告

由于此哈希算法的速度很快,不建议使用此函数来保护密码。 有关详细信息和最佳实践,请参阅 密码哈希常见问题解答

描述

md5(string $string, bool $binary = false): string

使用 » RSA Data Security, Inc. MD5 消息摘要算法 计算 string 的 MD5 哈希值,并返回该哈希值。

参数

string

字符串。

binary

如果可选的 binary 设置为 true,则 md5 摘要将以原始二进制格式返回,长度为 16。

返回值

以 32 个字符的十六进制数字形式返回哈希值。

示例

示例 #1 md5() 示例

<?php
$str
= 'apple';

if (
md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
echo
"您想要绿苹果还是红苹果?";
}
?>

参见

添加备注

用户贡献备注 7 则

yiminrong at yahoo dot ca
3 年前
关于 Ray Paseur 的评论,字符串哈希为

0e462097431906509019562988736854
0e830400451993494058024219903391

获得完全匹配格式 /^0+e[0-9]+$/ 的哈希值的概率并不高,但也不容忽视。

应在所有哈希函数中添加一般警告,始终使用三等号 === 进行比较。

实际上,警告应该在比较字符串值时放在运算符部分! 关于字符串比较有很多警告,但没有关于格式 /^0+e[0-9]+$/ 的具体内容。
Ray.Paseur sometimes uses Gmail
5 年前
md5('240610708') == md5('QNKCDZO')

此比较为真,因为两个 md5() 哈希值都以 '0e' 开头,因此 PHP 类型转换将这些字符串理解为科学计数法。 根据定义,零的任何次幂都是零。
John
14 年前
如果要对大量数据进行哈希运算,可以使用 hash_init/hash_update/hash_final 函数。

这允许您对块/部分/增量或您想称之为的任何内容进行哈希运算。
Shane Allen
21 年前
来自 Digest::MD5 文档
md5($data,...)
此函数将连接所有参数,计算此“消息”的 MD5 摘要,并以二进制形式返回。

md5_hex($data,...)
与 md5() 相同,但将以十六进制形式返回摘要。

PHP 的函数以十六进制形式返回摘要,所以我的猜测是你使用的是 md5() 而不是 md5_hex()。 我已经验证 md5_hex() 生成与 PHP 的 md5() 函数相同的字符串。

(原始评论在多个地方被剪切)
>使用 Perl 的 Digest::MD5 模块生成的十六进制哈希值将
>不等于使用 php 的 md5() 函数生成的哈希值,如果输入
>文本包含任何非字母数字字符。
>
>$phphash = md5('pa$$');
>echo "php original hash from text: $phphash";
>echo "md5 hash from perl: " . $myrow['password'];
>
>输出
>
>php original hash from text: 0aed5d740d7fab4201e885019a36eace
>hash from perl: c18c9c57cb3658a50de06491a70b75cd
Steve M
4 年前
我发现多个网站建议使用代码

md5(file_get_contents($filename));

直到最近,我才注意到本地没有问题……但后来我尝试对一个 700MB 的文件进行哈希运算,内存限制为 2048MB,并不断出现内存不足错误……

md5() 函数似乎对可以处理的字符串长度有限制,而且替代函数可能更节省内存。 我强烈建议所有需要文件哈希运算(用于检测重复,而不是安全摘要)的人使用 md5_file() 函数,而不是常规字符串 md5() 函数!

md5_file($filename);

注意,对于那些感兴趣的人来说,由于这是本地应用程序而不是服务器,我更关心结果而不是内存效率。 在生产环境中,你不应该在可以避免的情况下将整个文件一次性读入内存。(在编写代码时,我不知道有替代函数)
radon8472 at radon-software dot net
8 年前
<?php
function raw2hex($rawBinaryChars)
{
return =
array_pop(unpack('H*', $rawBinaryChars));
}
?>

hey2raw 的补充。
您可以使用它从原始 md5 格式转换为人类可读格式。

这对于检查“Content-Md5”HTTP 标头很有用。

<?php
$rawMd5
= base64_decode($_SERVER['HTTP_CONTENT_MD5']);
$post_data = file_get_contents("php://input");

if(
raw2hex($rawMd5) == md5($post_data)) // Post-Data is okay
else // Post-Data is currupted
?>
hkmaly
6 年前
注意:在您想到使用 md5 作为密码来防止其他人篡改消息的方法之前,请阅读维基百科上的“长度扩展攻击”和“基于哈希的消息认证代码”页面。 简而言之,天真的构造可能非常不安全。 如果可用,请使用 hash_hmac 或重新实现 HMAC,不要使用捷径。
To Top