字符串函数
在线手册:中文  英文

md5

(PHP 4, PHP 5)

md5计算字符串的 MD5 散列值

说明

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

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

参数

str

原始字符串。

raw_output

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

返回值

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

更新日志

版本 说明
5.0.0 新增 raw_output 参数。

范例

Example #1 md5() 范例

<?php
$str 
'apple';

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

注释

Note: Secure password hashing

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

参见


字符串函数
在线手册:中文  英文

用户评论:

programings at abv dot bg (2013-07-02 06:25:56)

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.

anthonymccuen at yahoo dot com (2011-11-24 14:49:02)

If your going to hash a password or some other content, you can try the code below.

<?php
function hash_pass($password) {
$appKey sha1($password);
    
$appId 555;
$otherApp '6cf6e971f7c125615a1ee20510c1c70f';     // simple md5
    
$appSaltKey crypt($password);

$getStrLen strlen($appKey);
$getIdLen strlen($appId);
$randzStrInt rand($appId999);

    if (
$appId === 555) {
        
$go strlen($appKey);
        
$other strlen(crypt(md5(rand($appId$appId))));
        
$execute rand($other$appId) . "-" rand($go$appId) . "-" rand(strlen(crypt($otherApp)), $appId);
        echo 
$execute " today is <b>" $date "</b>";
    }
?>

Anonymous (2011-05-03 10:28:30)

This is not encryption..... it's only a sort of DIGEST

John (2009-11-17 15:08:16)

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.

Serge (2008-05-20 15:19:53)

To convert an MD5 to 22 chars that contains only letters and numeric

<?php
define
('HEX_CHARS',    '0123456789abcdef');
define('BASE62_CHARS''0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
 
/*********************************************/
function ConvertFromArbitraryBase($Str$Chars)
/*********************************************/
{
    
/*
        Converts from an arbitrary-base string to a decimal string
    */
    
    
if (ereg('^[' $Chars ']+$'$Str))
    {
        
$Result '0';
        
        for (
$i=0$i<strlen($Str); $i++)
        {
            if (
$i != 0$Result bcmul($Resultstrlen($Chars));
            
$Result bcadd($Resultstrpos($Chars$Str[$i]));
        }
        
        return 
$Result;
    }
    
    return 
false;
}
 
/*******************************************/
function ConvertToArbitraryBase($Str$Chars)
/*******************************************/
{
    
/*
        Converts from a decimal string to an arbitrary-base string
    */
 
    
if (ereg('^[0-9]+$'$Str))
    {
        
$Result '';
        
        do
        {
            
$Result .= $Chars[bcmod($Strstrlen($Chars))];
            
$Str bcdiv($Strstrlen($Chars));
        }
        while (
bccomp($Str'0') != 0);
        
        return 
strrev($Result);
    }
    
    return 
false;
}
 
/**********************/
function CustomMD5($Str)
/**********************/
{
    return 
ConvertToArbitraryBase(ConvertFromArbitraryBase(md5($Str), HEX_CHARS), BASE62_CHARS);
}
?>

KB (2008-03-11 06:02:24)

This is probably well known, but I had a hard time finding a reference to it.
While md5 on a null string returns null, md5 on an EMPTY string does not return null or an empty string. Rather it returns "d41d8cd98f00b204e9800998ecf8427e"

admin at gadelkareem dot com (2008-01-14 20:16:00)

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( 
$rowmysql_fetch_assoc($r) )
        
print_r($row);

?>

dionyziz at deviantart dot com (2007-08-11 12:24:00)

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 += ) {
        
$ret .= chrhexdec$md5$i } ) + hexdec$md5$i } ) * 16 );
    }

    return 
$ret;
}

?>

sebastian dot haller at freesurf dot ch (2007-04-07 00:06:40)

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 (2006-05-16 03:12:36)

The complement of raw2hex

<?php

function hex2raw$str ){
  
$chunks str_split($str2);
  for( 
$i 0$i sizeof($chunks); $i++ ) {
        
$op .= chrhexdec$chunks[$i] ) );
    }
    return 
$op;
}

?>

rick.gaither (2005-12-20 09:14:56)

This is a nifty function to help in securing your web-forms. 

If no argument is passed the function will return an encrypted hex code representing the second it was called. If the same hex code is passed to the function it will return the number of seconds that have elapsed. The php script can then check the time between accessing the web-page and submitting the POST. This thwarts script ran web-form submissions. The program can verify a suitable period has elapsed for expected manual entries. The time check can be from 1 second to about 17 hours.

The function requires the latest PEAR Blowfish Encryption module.

This would go in the form:
<?php  print "<input type='hidden' value='" FormTimer() . "' name='FormCode'>";  ?>

This would go in the main php (post) script:
<?php
$seconds 
FormTimer($_POST['FormCode']);
if ((
$seconds 10) || ($seconds 1900)) { die "Your entry time took less than 10 seconds or more than 30 minutes"; }
?>

Function...
<?php
function FormTimer($CodeID="") {

    require (
'Blowfish.php');
    require (
'Blowfish/DefaultKey.php');

    
$key "Secret^Word";
    
$bf = new Crypt_Blowfish($key); 
     
$current substr(sprintf("%d", (time()+1)),-8);

    if (!
$CodeID) { return bin2hex($bf->encrypt($current)); } 

    
$len strlen($CodeID); $cValue = -1
    for (
$i=0;$i<$len;$i+=2$Crypt.=chr(hexdec(substr($CodeID,$i,2)));

    if (
$Crypt) {
        
$time_called $bf->decrypt($Crypt); 
        if (
$time_called) { $cValue = (intval($current) - intval($time_called)); }
    }
    return 
$cValue;
}
?>

terry _at_ scribendi_com (2005-04-28 19:39:56)

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. (2004-12-03 11:42:15)

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 (2003-04-14 20:53:14)

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

易百教程