md5

(PHP 4, PHP 5, PHP 7)

md5文字列のmd5ハッシュ値を計算する

警告

パスワードを守るためにこの関数を使うことはおすすめしません。 ハッシュアルゴリズムの高速性がその理由です。 詳細とベストプラクティスについては、パスワードハッシュ FAQを参照ください。

説明

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

» RSA Data Security, Inc. の MD5メッセージダイジェストアルゴリズム を用いて str の MD5 ハッシュ値を計算し、 そのハッシュを返します。

パラメータ

str

文字列。

raw_output

オプションのraw_outputTRUE が指定された場合、 md5 ダイジェストが 16 バイト長のバイナリ形式で返されます。

返り値

32 文字の 16 進数からなるハッシュを返します。

例1 md5() の例

<?php
$str 
'apple';

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

参考

  • md5_file() - 指定したファイルのMD5ハッシュ値を計算する
  • sha1_file() - ファイルの sha1 ハッシュを計算する
  • crc32() - 文字列の crc32 多項式計算を行う
  • sha1() - 文字列の sha1 ハッシュを計算する
  • hash() - ハッシュ値 (メッセージダイジェスト) を生成する
  • crypt() - 文字列の一方向のハッシュ化を行う
  • password_hash() - パスワードハッシュを作る

add a note add a note

User Contributed Notes 8 notes

up
17
Ray.Paseur sometimes uses Gmail
1 year ago
md5('240610708') == md5('QNKCDZO')

This comparison is true because both md5() hashes start '0e' so PHP type juggling understands these strings to be scientific notation.  By definition, zero raised to any power is zero.
up
7
Ken Guest
6 months ago
Use the strict comparision/identity operator:

php > var_dump(md5('240610708') == md5('QNKCDZO'));
php shell code:1:
bool(true)
php > var_dump(md5('240610708') === md5('QNKCDZO'));
php shell code:1:
bool(false)
php >

because, as mentioned previously, using the equality operator may result in false positives.
up
7
radon8472 at radon-software dot net
3 years ago
<?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
?>
up
-7
Shane Allen
16 years ago
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
up
-5
hkmaly
2 years ago
Note: Before you get some idea like using md5 with password as way to prevent others tampering with message, read pages "Length extension attack" and "Hash-based message authentication code" on wikipedia. In short, naive constructions can be dangerously insecure. Use hash_hmac if available or reimplement HMAC properly without shortcuts.
up
-12
terry _at_ scribendi_com
14 years ago
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.
up
-25
dionyziz at deviantart dot com
12 years ago
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;
}

?>
up
-26
John
10 years ago
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.
To Top