Мне нужно запустить следующее на общей учетной записи веб-хостинга, работающей под управлением 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
, но я сильно сомневаюсь в этом.
Других решений пока нет …