Мне нужно запустить следующее в общей учетной записи веб-хостинга, работающей в PHP версии 5.4.34. (Т.е. я не могу установить сторонние библиотеки.)
Существует ли стандартная функция для реализации аутентифицированного шифрования Galois/Counter Mode (GCM) (стандарта AES) в двоичной строке?
Если OpenSSL не установлен, нет другого метода, кроме поиска простой реализации PHP в Интернете.
Если он установлен, вы можете проверить с помощью openssl_get_cipher_methods()
, поддерживает ли установленная версия GCM. Используйте его так:
$strong;
$iv = openssl_random_pseudo_bytes(12, $strong);
if (!$strong) {
exit(1);
}
$key = openssl_random_pseudo_bytes(12, $strong);
if (!$strong) {
exit(1);
}
$data = "some string";
$ciphertext = openssl_encrypt($data, "aes-128-gcm", $key, 0, $iv);
$decrypted = openssl_decrypt($ciphertext, "aes-128-gcm", $key, 0, $iv);
var_dump($data == $decrypted);
Спасибо Скотту Арцишевски за замечание, что это не работает вообще для PHP <7.1, потому что тег аутентификации не может быть получен во время шифрования, и поэтому дешифровка всегда будет работать без него.
Если mcrypt установлен, вы можете проверить, доступен ли GCM через mcrypt_list_modes
, но я очень сомневаюсь в этом.
openssl_get_cipher_methods
дает мнеaes-128-gcm
,aes-192-gcm
иaes-256-gcm
аmcrypt_list_modes
- нет, как вы и предполагали. Я знаком с функциямиmcrypt
, но я никогда не сталкивался с OpenSSL в PHP. Любые подсказки, как его использовать?$password
на самом деле является ключом. Я обновил свой ответ.