Mhash get hash name: примеры (PHP)

Использование mhash_get_hash_name с примерами на PHP
Раздел: Хеширование и шифрование
mhash_get_hash_name(int $hash): string

Функция mhash_get_hash_name возвращает название алгоритма хеширования по его идентификатору. Эта функция является частью расширения Mhash, которое предоставляет интерфейс к библиотеке libmhash.

Когда используется

Функция применяется для получения читаемого имени алгоритма, когда известен только его числовой идентификатор. Это может быть полезно при обработке списка доступных алгоритмов, отладке или динамическом выборе метода хеширования.

Аргументы функции
  • $hash_id (int) — числовой идентификатор алгоритма хеширования. Допустимые значения соответствуют константам MHASH_АЛГОРИТМ (например, MHASH_MD5, MHASH_SHA256).

Функция возвращает строку с названием алгоритма или false, если передан неверный идентификатор.

Примеры использования
Получение названия по идентификатору
<?php
// Пример с корректным идентификатором
$hash_id = MHASH_SHA256;
$hash_name = mhash_get_hash_name($hash_id);
echo $hash_name;
?>
SHA256
Некорректный идентификатор
<?php
$hash_id = 9999; // Несуществующий идентификатор
$hash_name = mhash_get_hash_name($hash_id);
var_dump($hash_name);
?>
bool(false)
Перебор доступных алгоритмов
<?php
// Получение списка всех доступных алгоритмов
for ($i = 0; $i <= 100; $i++) {
    $name = mhash_get_hash_name($i);
    if ($name !== false) {
        echo "ID $i: $name\n";
    }
}
?>
ID 1: CRC32
ID 2: MD5
ID 3: SHA1
ID 4: HAVAL256
ID 5: RIPEMD160
... (вывод зависит от версии библиотеки)

В современном PHP (версии 5.3 и выше) расширение Mhash считается устаревшим. Рекомендуется использовать функции из встроенного расширения hash.

  • hash_algos() — возвращает массив с именами доступных алгоритмов хеширования. Прямого аналога mhash_get_hash_name не требуется, так как hash_algos возвращает список строк.
  • hash() — создает хеш-сумму с использованием указанного алгоритма.
Предпочтение в использовании

Расширение Hash является встроенным, активно развивается и поддерживает больше алгоритмов. Его следует использовать во всех новых проектах. Mhash может быть полезен только при работе с унаследованным кодом.

Mhash get hash name в Python

В Python для получения списка доступных алгоритмов используется модуль hashlib.

import hashlib
print(hashlib.algorithms_available)
{'sha3_384', 'md5', 'blake2s', 'sha384', 'sha3_256', 'sha1', 'shake_256', 'sha256', 'sha3_512', 'sha512', 'sha3_224', 'shake_128', 'blake2b', 'sha224'}
JavaScript (Node.js)

В Node.js доступные алгоритмы можно получить через модуль crypto.

const crypto = require('crypto');
console.log(crypto.getHashes());
[ 'RSA-MD4', 'RSA-MD5', 'RSA-MDC2', 'RSA-RIPEMD160', 'RSA-SHA1', ... ]

Mhash get hash name в MySQL

В MySQL нет прямой функции для получения списка алгоритмов. Однако поддерживаются функции хеширования, такие как MD5(), SHA1(), SHA2().

Типичные ошибки
Использование устаревшего расширения
<?php
// Расширение Mhash может быть не установлено
$hash_id = MHASH_SHA256;
$hash_name = mhash_get_hash_name($hash_id); // Ошибка, если расширение не загружено
?>

Решение: убедиться, что расширение установлено или перейти на использование расширения Hash.

Передача нечислового аргумента
<?php
$hash_name = mhash_get_hash_name('sha256'); // Ожидается число
var_dump($hash_name);
?>
Warning: mhash_get_hash_name() expects parameter 1 to be int, string given
bool(false)

В PHP 8.0.0 расширение Mhash было перемещено в PECL. Оно больше не входит в стандартную поставку PHP. Для его использования требуется отдельная установка через PECL. Это изменение отражает общую тенденцию отказа от устаревших расширений в пользу Hash.

Расширенные примеры
Сопоставление идентификаторов и имен
Пример php
<?php
// Создание карты всех доступных алгоритмов Mhash
$hash_map = [];
for ($i = 0; $i <= 100; $i++) {
    $name = mhash_get_hash_name($i);
    if ($name !== false) {
        $hash_map[$i] = $name;
    }
}
print_r($hash_map);
?>
Array
(
    [1] => CRC32
    [2] => MD5
    [3] => SHA1
    [4] => HAVAL256
    [5] => RIPEMD160
    ...
)
Интеграция с выбором алгоритма
Пример php
<?php
// Динамический выбор алгоритма на основе доступности
$preferred_algorithms = [MHASH_SHA512, MHASH_SHA256, MHASH_SHA1];
foreach ($preferred_algorithms as $algo_id) {
    if (mhash_get_hash_name($algo_id) !== false) {
        echo 'Выбран алгоритм: ' . mhash_get_hash_name($algo_id);
        break;
    }
}
?>
Выбран алгоритм: SHA512
Сравнение с hash_algos
Пример php
<?php
// Сопоставление алгоритмов Mhash и Hash
$mhash_names = [];
for ($i = 0; $i <= 100; $i++) {
    $name = mhash_get_hash_name($i);
    if ($name !== false) {
        $mhash_names[] = strtolower($name);
    }
}
$hash_names = hash_algos();
$common = array_intersect($mhash_names, $hash_names);
echo 'Общие алгоритмы: ' . implode(', ', $common);
?>
Общие алгоритмы: crc32, md5, sha1, sha256, sha384, sha512, ripemd160, haval256, haval224, haval192, haval160, haval128, tiger192, tiger160, tiger128

PHP mhash_get_hash_name function comments

En
Mhash get hash name Gets the name of the specified hash