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'}В 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
// Создание карты всех доступных алгоритмов 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
// Динамический выбор алгоритма на основе доступности
$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
<?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