PHP AES 128-битное шифрование / дешифрование

Я пытаюсь понять, как AES шифрует фрагмент текста (16 байт — 128 бит). Этот код из Руководство по PHP:

$key = openssl_random_pseudo_bytes(32);
$plaintext = "message to be encrypted";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
//store $cipher, $iv, and $tag for decryption later
$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
echo $original_plaintext."\n";
}

Единственная проблема в том, что я не совсем понимаю. $cipher является aes-128-gcm но я получаю 32 байта шифрования.

Итак, мои вопросы:
Может кто-нибудь помочь мне понять, как это на самом деле работает?

Можно ли сделать это 16 байт / 128 байт?

И безопасно ли хранить $cipher, $iv, $key а также $tag в базу данных MySQL для дальнейшего использования?

П.С .: если я изменюсь $key длина до 16 вместо 32 окончательный вывод $ciphertext все еще 32 байта.

Спасибо!

0

Решение

Единственная проблема в том, что я не совсем понимаю. $ cipher — это aes-128-gcm, но я получаю 32-байтовое шифрование.

AES-GCM является аутентифицированным шифром. Если вы пытаетесь узнать, как работает основной строительный блок, вы хотите поиграть с aes-128-ecb вместо.

Если вы хотите в режиме реального шифрования, вы хотите продолжать использовать GCM, никогда не ЕЦБ.

И безопасно ли хранить $ cipher, $ iv, $ key и $ tag в базе данных MySQL для дальнейшего использования?

Вы можете хранить все Кроме ключ, безопасно. Ключ позволяет вам расшифровать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]