PHP AES 128位加密/解密

时间:2018-09-06 09:31:30

标签: php encryption aes-gcm

我试图了解如何AES加密一段文本(16字节-128位)。这段代码来自php manual

$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";
}

唯一的问题是我不太了解。 $cipheraes-128-gcm,但我正在获得32字节的加密。

所以我的问题是: 有人可以帮助我了解它的实际工作原理吗?

是否可以将其设置为16字节/ 128位?

$cipher$iv$key$tag存储到MySQL数据库中以供以后使用是否安全?

P.S:如果我将$key的长度更改为16而不是32,则$ciphertext的最终输出仍然是32个字节。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

唯一的问题是我不太了解。 $ cipher是aes-128-gcm,但我正在获得32字节的加密。

AES-GCM是一种经过身份验证的密码。如果您想学习基本的构建块是如何工作的,则可以改用aes-128-ecb

如果要使用真实世界的加密模式,则要继续使用GCM never ECB

  

将$ cipher,$ iv,$ key和$ tag存储到MySQL数据库中以供以后使用是否安全?

您可以安全地存储除键以外的所有内容。密钥可让您解密。