Openssl get md methods: примеры (PHP)
openssl_get_md_methods(bool $aliases = false): arrayОсновная информация о функции openssl_get_md_methods
Функция openssl_get_md_methods возвращает список доступных алгоритмов хеширования (digest methods), поддерживаемых расширением OpenSSL в текущей конфигурации PHP. Эта информация полезна для проверки возможности использования конкретных алгоритмов перед выполнением операций подписи, верификации или хеширования.
Функция имеет следующую сигнатуру:
openssl_get_md_methods(bool $aliases = false, bool $digests_only = true): array
- aliases (bool) - если установлено в true, то в результат включаются псевдонимы алгоритмов. По умолчанию false.
- digests_only (bool) - если установлено в true, возвращаются только алгоритмы хеширования. При false возвращаются также алгоритмы шифрования. По умолчанию true.
Функция не требует дополнительных зависимостей, кроме активированного расширения OpenSSL.
Базовые примеры использования
$methods = openssl_get_md_methods();
print_r($methods);Array
(
[0] => MD2
[1] => MD4
[2] => MD5
[3] => SHA1
[4] => SHA224
[5] => SHA256
[6] => SHA384
[7] => SHA512
[8] => RIPEMD160
// ... другие алгоритмы
)$methodsWithAliases = openssl_get_md_methods(true);
echo count($methodsWithAliases);58
$allMethods = openssl_get_md_methods(false, false);
echo in_array('AES-128-CBC', $allMethods) ? 'Да' : 'Нет';Да
Похожие функции в PHP
Функция hash_algos() возвращает список алгоритмов, поддерживаемых расширением Hash. Эти алгоритмы используются функцией hash(). Отличие от openssl_get_md_methods в том, что hash_algos включает только алгоритмы хеширования без псевдонимов и не зависит от OpenSSL.
$hashAlgos = hash_algos();
print_r(array_slice($hashAlgos, 0, 5));Array
(
[0] => md2
[1] => md4
[2] => md5
[3] => sha1
[4] => sha224
)Функция openssl_get_cipher_methods() возвращает список алгоритмов шифрования. Полезна при выборе метода для функций шифрования/дешифрования. Для получения полного списка методов OpenSSL можно использовать openssl_get_md_methods с параметром digests_only = false.
Типичные ошибки при использовании
При передаче имени алгоритма, которого нет в возвращаемом списке, другие функции OpenSSL могут генерировать ошибки.
$methods = openssl_get_md_methods();
if (!in_array('SHA3-256', $methods, true)) {
echo 'Алгоритм SHA3-256 не поддерживается';
}Алгоритм SHA3-256 не поддерживается
Неучет влияния параметров aliases и digests_only может привести к неверной проверке доступности алгоритма.
// Хотим использовать алгоритм 'sha1', но он может быть в списке как 'SHA1'
$methods = openssl_get_md_methods();
$needle = 'sha1';
$result = in_array($needle, $methods) ? 'Найден' : 'Не найден';
echo $result;Не найден
Рекомендуется использовать регистронезависимое сравнение или проверять оба варианта.
Изменения в последних версиях PHP
В PHP 8.0 функция openssl get md methods не претерпела значительных изменений в сигнатуре. Однако были обновлены внутренние зависимости OpenSSL, что могло повлиять на список возвращаемых алгоритмов. Добавлена поддержка новых алгоритмов, соответствующих OpenSSL 1.1.1.
Не было существенных изменений в работе функции. Проведены общие улучшения стабильности расширения OpenSSL.
Функция сохранила обратную совместимость. В этих версиях продолжается обновление поддерживаемых алгоритмов в соответствии с новыми версиями OpenSSL.
Расширенные примеры использования
$methods = openssl_get_md_methods();
$secureAlgos = [];
foreach ($methods as $algo) {
if (stripos($algo, 'SHA') === 0 && (int)filter_var($algo, FILTER_SANITIZE_NUMBER_INT) >= 256) {
$secureAlgos[] = $algo;
}
}
print_r($secureAlgos);Array
(
[0] => SHA256
[1] => SHA384
[2] => SHA512
[3] => SHA224
)function isSigningAlgorithmAvailable($algorithm) {
$allMethods = openssl_get_md_methods(true, false);
return in_array($algorithm, $allMethods, true);
}
echo isSigningAlgorithmAvailable('RSA-SHA256') ? 'Доступен' : 'Недоступен';Доступен
$methods = openssl_get_md_methods(true);
$families = [];
foreach ($methods as $method) {
$family = preg_replace('/[^a-zA-Z]/', '', $method);
if (!isset($families[$family])) {
$families[$family] = 0;
}
$families[$family]++;
}
arsort($families);
print_r($families);Array
(
[SHA] => 12
[MD] => 5
[RIPEMD] => 5
// ...
)$opensslMethods = openssl_get_md_methods();
$hashMethods = hash_algos();
$opensslOnly = array_diff(
array_map('strtolower', $opensslMethods),
array_map('strtolower', $hashMethods)
);
print_r(array_values($opensslOnly));Array
(
[0] => md4
[1] => ripemd160
// ...
)Альтернативы в других языках программирования
В Python модуль hashlib предоставляет атрибут algorithms_available, содержащий множество доступных алгоритмов хеширования. В отличие от PHP, Python может использовать различные криптографические бэкенды.
import hashlib
print(list(hashlib.algorithms_available)[:5])['sha3_384', 'sha384', 'sha1', 'md5', 'sha512']
В браузерном JavaScript для получения списка алгоритмов используют Web Crypto API через метод subtle.digest, но прямого аналога функции получения списка нет. В Node.js доступен модуль crypto с методом getHashes.
const crypto = require('crypto');
console.log(crypto.getHashes().slice(0, 3));['RSA-MD4', 'RSA-MD5', 'RSA-MDC2']
В MySQL нет функции для получения списка алгоритмов, но поддерживаются конкретные функции хеширования: MD5(), SHA1(), SHA2(). Список фиксирован и зависит от версии СУБД.
PHP openssl_get_md_methods function comments
- Php openssl get md methods - аргументы и возвращаемое значение
- Функция php openssl_get_md_methods - описание
- openssl get md methods - примеры
- openssl get md methods - похожие методы на php
- openssl_get_md_methods на js, python, mysql
- openssl get md methods изменения php
- Примеры openssl_get_md_methods на php