我试图了解如何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";
}
唯一的问题是我不太了解。 $cipher
是aes-128-gcm
,但我正在获得32字节的加密。
所以我的问题是: 有人可以帮助我了解它的实际工作原理吗?
是否可以将其设置为16字节/ 128位?
将$cipher
,$iv
,$key
和$tag
存储到MySQL数据库中以供以后使用是否安全?
P.S:如果我将$key
的长度更改为16
而不是32
,则$ciphertext
的最终输出仍然是32个字节。
谢谢!
答案 0 :(得分:0)
唯一的问题是我不太了解。 $ cipher是aes-128-gcm,但我正在获得32字节的加密。
AES-GCM是一种经过身份验证的密码。如果您想学习基本的构建块是如何工作的,则可以改用aes-128-ecb
。
如果要使用真实世界的加密模式,则要继续使用GCM never ECB。
将$ cipher,$ iv,$ key和$ tag存储到MySQL数据库中以供以后使用是否安全?
您可以安全地存储除键以外的所有内容。密钥可让您解密。