Openssl get cipher methods: примеры (PHP)
openssl_get_cipher_methods(bool $aliases = false): arrayОписание функции openssl_get_cipher_methods
Функция openssl_get_cipher_methods возвращает перечень доступных методов шифрования (шифров), которые поддерживаются модулем OpenSSL в текущей среде PHP. Она применяется для получения списка алгоритмов, которые можно использовать в других функциях модуля OpenSSL, например, при шифровании данных, создании или проверке цифровых подписей.
Функция принимает один необязательный параметр:
- $aliases (bool) – определяет, следует ли включать в итоговый массив псевдонимы (алиасы) методов шифрования. Если аргумент равен
true, псевдонимы добавляются в результат. По умолчанию (начиная с PHP 8.0.0) имеет значениеfalse.
Функция возвращает индексированный массив, содержащий названия доступных шифров.
Примеры использования функции
<?
$ciphers = openssl_get_cipher_methods();
print_r(array_slice($ciphers, 0, 5));
?>Array
(
[0] => AES-128-CBC
[1] => AES-128-CBC-HMAC-SHA1
[2] => AES-128-CBC-HMAC-SHA256
[3] => AES-128-CCM
[4] => AES-128-CFB
)<?
$allCiphers = openssl_get_cipher_methods(true);
echo count($allCiphers);
?>169
<?
$ciphers = openssl_get_cipher_methods();
$gcmCiphers = array_filter($ciphers, fn($c) => stripos($c, 'gcm') !== false);
print_r(array_values($gcmCiphers));
?>Array
(
[0] => AES-128-GCM
[1] => AES-192-GCM
[2] => AES-256-GCM
[3] => ARIA-128-GCM
[4] => ARIA-192-GCM
[5] => ARIA-256-GCM
)Похожие функции в PHP
В PHP существуют другие функции для получения информации о доступных криптографических алгоритмах.
Функция openssl_get_md_methods возвращает массив доступных методов хеширования (дайджестов), например, 'sha256', 'md5'. Она полезна, когда требуется выбрать алгоритм для создания или проверки хеша.
Функция hash_hmac_algos возвращает перечень алгоритмов, которые поддерживаются функцией hash_hmac. Этот список обычно шире, чем у OpenSSL, и включает в себя алгоритмы, специфичные для расширения Hash.
Функцию openssl_get_cipher_methods используют при работе непосредственно с функциями шифрования/расшифрования OpenSSL (например, openssl_encrypt), тогда как hash_hmac_algos применяется для выбора алгоритма HMAC.
Типичные ошибки при использовании
Функция всегда возвращает массив. Попытка использовать результат как строку приводит к ошибке или некорректному поведению.
<?
$ciphers = openssl_get_cipher_methods();
echo $ciphers; // Выведет 'Array' и предупреждение
?>Array Warning: Array to string conversion in ...
Поиск метода в массиве должен быть регистрозависимым, так как названия возвращаются в строго определенном формате.
<?
$ciphers = openssl_get_cipher_methods();
// Неправильно
$hasCipher = in_array('aes-256-cbc', $ciphers); // false
// Правильно
$hasCipher = in_array('AES-256-CBC', $ciphers); // true
?>Изменения в последних версиях PHP
В PHP 8.0.0 необязательный параметр $aliases по умолчанию был изменен на false. В предыдущих версиях (PHP 7.x) параметр был обязательным, и его необходимо было явно передавать как булево значение.
// PHP 7.x
$ciphers = openssl_get_cipher_methods(false);
// PHP 8.0.0+
$ciphers = openssl_get_cipher_methods(); // эквивалентно falseРасширенные примеры использования
<?
$ciphers = openssl_get_cipher_methods();
$secureCiphers = array_filter($ciphers, function($cipher) {
return stripos($cipher, 'GCM') !== false || stripos($cipher, 'CCM') !== false;
});
echo '';
?><?
function isCipherSupported($cipherName) {
$available = openssl_get_cipher_methods();
return in_array($cipherName, $available);
}
$cipherToUse = 'AES-256-GCM';
if (isCipherSupported($cipherToUse)) {
$iv = random_bytes(openssl_cipher_iv_length($cipherToUse));
$key = random_bytes(32);
$data = 'Секретные данные';
$encrypted = openssl_encrypt($data, $cipherToUse, $key, 0, $iv, $tag);
echo 'Данные зашифрованы.';
} else {
echo 'Алгоритм не поддерживается.';
}
?><?
$base = openssl_get_cipher_methods(false);
$withAliases = openssl_get_cipher_methods(true);
$difference = array_diff($withAliases, $base);
if (!empty($difference)) {
echo 'Найдены псевдонимы: ';
print_r(array_values($difference));
}
?>Найдены псевдонимы:
Array
(
[0] => des-ede3-cbc
[1] => des-ede3
[2] => des-ede3-ofb
[3] => des3
// ...
)Альтернативы в других языках программирования
Openssl get cipher methods в Python
В стандартной библиотеке Python модуль cryptography предоставляет аналогичные возможности. Список доступных шифров можно получить через объекты библиотеки, но напрямую аналогичной функции нет. Чаще алгоритм указывается явно.
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
# Алгоритмы импортируются напрямую, например:
# cipher = Cipher(algorithms.AES(key), modes.GCM(nonce), backend=default_backend())В Node.js модуль crypto содержит метод getCiphers(), который возвращает массив с названиями поддерживаемых алгоритмов шифрования.
const crypto = require('crypto');
const ciphers = crypto.getCiphers();
console.log(ciphers.slice(0, 5));[ 'aes-128-cbc', 'aes-128-ccm', 'aes-128-cfb', 'aes-128-cfb1', 'aes-128-cfb8' ]
Openssl get cipher methods в MySQL
В СУБД MySQL нет функции, которая возвращает список доступных алгоритмов шифрования. Алгоритмы указываются явно в таких функциях, как AES_ENCRYPT() или DES_ENCRYPT().
PHP openssl_get_cipher_methods function comments
- Php openssl get cipher methods - аргументы и возвращаемое значение
- Функция php openssl_get_cipher_methods - описание
- openssl get cipher methods - примеры
- openssl get cipher methods - похожие методы на php
- openssl_get_cipher_methods на js, python, mysql
- openssl get cipher methods изменения php
- Примеры openssl_get_cipher_methods на php