ConFoo 2025

hash_algos

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL hash >= 1.1)

hash_algos登録されているハッシュアルゴリズムの一覧を返す

説明

hash_algos(): array

パラメータ

この関数にはパラメータはありません。

戻り値

サポートされているハッシュアルゴリズムの一覧を、数値添字の 配列として返します。

変更履歴

バージョン 説明
8.1.0 MurmurHash3 と xxHash のサポートを追加しました。
7.4.0 crc32c のサポートを追加しました。
7.1.0 sha512/224, sha512/256, sha3-224, sha3-256, sha3-384 および sha3-512 のサポートを追加しました。

例1 hash_algos() の例

PHP 8.1.0 では、hash_algos() は 以下のようなアルゴリズム名の一覧を返します。

<?php
print_r
(hash_algos());
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [0] => md2
    [1] => md4
    [2] => md5
    [3] => sha1
    [4] => sha224
    [5] => sha256
    [6] => sha384
    [7] => sha512/224
    [8] => sha512/256
    [9] => sha512
    [10] => sha3-224
    [11] => sha3-256
    [12] => sha3-384
    [13] => sha3-512
    [14] => ripemd128
    [15] => ripemd160
    [16] => ripemd256
    [17] => ripemd320
    [18] => whirlpool
    [19] => tiger128,3
    [20] => tiger160,3
    [21] => tiger192,3
    [22] => tiger128,4
    [23] => tiger160,4
    [24] => tiger192,4
    [25] => snefru
    [26] => snefru256
    [27] => gost
    [28] => gost-crypto
    [29] => adler32
    [30] => crc32
    [31] => crc32b
    [32] => crc32c
    [33] => fnv132
    [34] => fnv1a32
    [35] => fnv164
    [36] => fnv1a64
    [37] => joaat
    [38] => murmur3a
    [39] => murmur3c
    [40] => murmur3f
    [41] => xxh32
    [42] => xxh64
    [43] => xxh3
    [44] => xxh128
    [45] => haval128,3
    [46] => haval160,3
    [47] => haval192,3
    [48] => haval224,3
    [49] => haval256,3
    [50] => haval128,4
    [51] => haval160,4
    [52] => haval192,4
    [53] => haval224,4
    [54] => haval256,4
    [55] => haval128,5
    [56] => haval160,5
    [57] => haval192,5
    [58] => haval224,5
    [59] => haval256,5
)

参考

  • hash() - ハッシュ値 (メッセージダイジェスト) を生成する
  • hash_hmac_algos() - hash_hmac に合うハッシュアルゴリズムの一覧を返す
add a note

User Contributed Notes 3 notes

up
20
Miguel Florido
10 years ago
Ansewring to holdoffhunger avoid crc32, the are different results because the crc32(); use the algorithm 'crc32b'. To check this only have to write:

echo hash('crc32b', 'The quick brown fox jumped over the lazy dog.'), "\n";
echo dechex (crc32('The quick brown fox jumped over the lazy dog.'));

And check that both have the same results:

82a34642
82a34642
up
9
holdoffhunger at gmail dot com
12 years ago
If you print the results of the hash_algos function and look at all of the available hashing functions, you will find three with duplicate functions: md5, sha1, crc32, and sha256. That means you can call the any of these function with either its own function or the hash function. For example, with the SHA1 function :

<?php

// Author: holdoffhunger@gmail.com

$sha1_first_value = sha1("secret", FALSE);

$sha1_second_value = hash("sha1", "secret", FALSE);

?>

However, the alternate title for the SHA256 algorithm is "getImageSignature", as part of the ImageMagick application package. Oddly, the CRC32 function returns different values when called from its own particular function (crc32()) compared to when it's called through the hash function (hash()). This leads me to suspect that they may be different implementations of the crc32 algorithm altogether. The different functions for SHA1 and MD5, however, produce the same results. The SHA-256 algorithm, as implemented in the ImageMagick function, also produces different results compared to the results of the hash_file() function within the Hash application package.

For the String "1234567890", the single CRC32() Function (which doesn't have an option for binary, "raw data" representation) produces "639479525", but when called through the Hash() Function, that same string produces "b6536850". I cannot find the relationship of any of these values, as they are not inverses of each other, nor is their sum or difference equal to any power of two (as I suspected they might be an equal distance from 0 or 2^32).

Both the SHA1 and MD5 alternate functions have the parameter of "TRUE/FALSE" at the end to indicate whether the result is given in binary (raw data) or not. Unfortunately, this often turns out to be data that doesn't print very well. It is recommended to be printed with the statement of printf("%u\n", $crc_32_value);. However, that often doesn't produce any usable results, either. The only method I have discovered is the "bin2hex" function, like so :

<?php

$md5_value
= hash("md5", "secret", FALSE);
$md5_value_in_hex = bin2hex($md5_value);

?>

However, bin2hex returns a hexadecimal representation, whereas you probably wanted a string of binary 1's and 0's. You can use the base_convert function, such as base_convert($md5_value_in_hex, 16, 2);. However, base_convert doesn't work on large numbers, so you have to write your own function for converting Hex to Binary.

One other thing that will probably catch your attention is that half of the listed algorithms have similar names, but are represented with different numbers. That means that the algorithm takes parameters itself, such as number of bits for the resultant hash value and number of rounds to do in producing the hashed result. The first number in the title of the Hash Function usually indicates the size of the hash result, such as 128 bit for "haval128,3" and 160 bit for "tiger160,4". The second number, however, indicates the number of rounds, such as 5 rounds for "haval224,5".
up
1
alvaro at demogracia dot com
14 years ago
These algorithms can be used to generate a session ID. Just pick a string value from the list and feed the session.hash_function directive with it. E.g.:

<?php
ini_set
('session.hash_function', 'whirlpool');
?>
To Top