字符串 函数
PHP Manual

md5

(PHP 4, PHP 5, PHP 7)

md5计算字符串的 MD5 散列值

说明

string md5 ( string $str [, bool $raw_output = false ] )

使用 » RSA 数据安全公司的 MD5 报文算法计算 str 的 MD5 散列值。

参数

str

原始字符串。

raw_output

如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。

返回值

以 32 字符十六进制数字形式返回散列值。

范例

Example #1 md5() 范例

<?php
$str 
'apple';

if (
md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
    echo 
"Would you like a green or red apple?";
}
?>

注释

Note: Secure password hashing

由于此函数依赖的算法已不足够复杂,不推荐使用此函数对明文密码加密。详细内容参见这里

参见

User Contributed Notes

radon8472 at radon-software dot net 18-Apr-2016 11:10
<?php
   
function raw2hex($rawBinaryChars)
    {
      return =
array_pop(unpack('H*', $rawBinaryChars));
    }
?>

The complement of hey2raw.
You can use to convert from raw md5-format to human-readable format.

This can be usefull to check "Content-Md5" HTTP-Header.

<?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
?>
programings at abv dot bg 02-Jul-2013 03:25
This recursive function allow you to hash something in depth using md5().

<?php
function checksum($what, $depth = 1) {
$depth--;
if (!
$depth)
return
md5($what);
else
return
md5(checksum($what, $depth));
}
?>

The function hashed the previous hash to md5() again and again for number of times and returns the last received hash.

Example usage:

<?php
for ($i = 1; $i <= 10; $i++) {
echo
"$i. ".checksum("test", $i)."<br />";
}
?>

It can be used for security purposes.
Anonymous 03-May-2011 07:28
This is not encryption..... it's only a sort of DIGEST
John 18-Nov-2009 12:08
If you want to hash a large amount of data you can use the hash_init/hash_update/hash_final functions.

This allows you to hash chunks/parts/incremental or whatever you like to call it.
admin at gadelkareem dot com 15-Jan-2008 05:16
MySQL MD() will not give you the same hash if character set is different.
ex :
<?php
#suppose table_name CHARSET=UTF8
#$md5 = md5('St?dte'); # will give you a different hash than MySQL MD5()
#instead use
$md5 = md5(utf8_encode('St?dte'));
$r = mysql_query("SELECT *, MD5(`word`) FROM `table_name` WHERE MD5(`word`) LIKE '{$md5}'");
if(
$r)
    while(
$row= mysql_fetch_assoc($r) )
       
print_r($row);

?>
dionyziz at deviantart dot com 11-Aug-2007 09:24
Sometimes it's useful to get the actual, binary, md5 digest.
You can use this function for it:

<?php

function md5bin( $target ) {
   
$md5 = md5( $target );
   
$ret = '';

    for (
$i = 0; $i < 32; $i += 2 ) {
       
$ret .= chr( hexdec( $md5{ $i + 1 } ) + hexdec( $md5{ $i } ) * 16 );
    }

    return
$ret;
}

?>
sebastian dot haller at freesurf dot ch 07-Apr-2007 09:06
It has been found, that hash('md5', 'string'); is faster than md5($string):

http://www.php.net/manual/en/function.hash.php
marzetti dot marco at NOSPAM dot gmail dot com 16-May-2006 12:12
The complement of raw2hex

<?php

function hex2raw( $str ){
 
$chunks = str_split($str, 2);
  for(
$i = 0; $i < sizeof($chunks); $i++ ) {
       
$op .= chr( hexdec( $chunks[$i] ) );
    }
    return
$op;
}

?>
terry _at_ scribendi_com 29-Apr-2005 04:39
Do not use the hex strings returned by md5() as a key for MCrypt 256-bit encryption.  Hex characters only represent four bits each, so when you take 32 hex characters, you are only really using a 128-bit key, not a 256-bit one. 

Using an alphanumeric key generator [A-Za-z0-9] will also only provide a 192-bit key in 32 characters.

Two different MD5s concatenated in raw binary form, or mcrypt_create_iv(32,MCRYPT_DEV_RANDOM) will give you a true 256-bit key string.
John S. 03-Dec-2004 08:42
If you want to replicate CPAN Digest::MD5's function md5_base64 in PHP, use this code:

<?php

function md5_base64 ( $data )
{
    return
preg_replace('/=+$/','',base64_encode(pack('H*',md5($data))));
}

?>
Shane Allen 15-Apr-2003 05:53
From the documentation on Digest::MD5:
md5($data,...)
This function will concatenate all arguments, calculate the MD5 digest of this "message", and return it in binary form.

md5_hex($data,...)
Same as md5(), but will return the digest in hexadecimal form.

PHP's function returns the digest in hexadecimal form, so my guess is that you're using md5() instead of md5_hex(). I have verified that md5_hex() generates the same string as PHP's md5() function.

(original comment snipped in various places)
>Hexidecimal hashes generated with Perl's Digest::MD5 module WILL
>NOT equal hashes generated with php's md5() function if the input
>text contains any non-alphanumeric characters.
>
>$phphash = md5('pa$$');
>echo "php original hash from text: $phphash";
>echo "md5 hash from perl: " . $myrow['password'];
>
>outputs:
>
>php original hash from text: 0aed5d740d7fab4201e885019a36eace
>hash from perl: c18c9c57cb3658a50de06491a70b75cd

字符串 函数
PHP Manual