GCM аутентифицированная функция шифрования для PHP

0

Мне нужно запустить следующее в общей учетной записи веб-хостинга, работающей в PHP версии 5.4.34. (Т.е. я не могу установить сторонние библиотеки.)

Существует ли стандартная функция для реализации аутентифицированного шифрования Galois/Counter Mode (GCM) (стандарта AES) в двоичной строке?

Теги:
encryption
encryption-symmetric
aes-gcm

1 ответ

0
Лучший ответ

Если 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, но я очень сомневаюсь в этом.

  • 0
    Очень мило спасибо. openssl_get_cipher_methods дает мне aes-128-gcm , aes-192-gcm и aes-256-gcm а mcrypt_list_modes - нет, как вы и предполагали. Я знаком с функциями mcrypt , но я никогда не сталкивался с OpenSSL в PHP. Любые подсказки, как его использовать?
  • 0
    Обратите внимание, что $password на самом деле является ключом. Я обновил свой ответ.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню