PHP 的 GCM 认证加密函数
GCM authenticated encryption function for PHP
我需要 运行 共享虚拟主机帐户 运行ning PHP 引擎版本 5.4.34 上的以下内容。 (即我无法安装任何第 3 方库。)
是否有标准函数可以在二进制字符串上实现 Galois/Counter Mode (GCM) authenticated encryption (of 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);
感谢 Scott Arciszewski 在评论中指出这对 PHP < 7.1 根本不起作用,因为在加密期间无法检索身份验证标签,因此没有它解密将始终失败。
如果安装了 mcrypt,您可以通过 mcrypt_list_modes
检查 GCM 是否可用,但我非常怀疑。
我需要 运行 共享虚拟主机帐户 运行ning PHP 引擎版本 5.4.34 上的以下内容。 (即我无法安装任何第 3 方库。)
是否有标准函数可以在二进制字符串上实现 Galois/Counter Mode (GCM) authenticated encryption (of 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);
感谢 Scott Arciszewski 在评论中指出这对 PHP < 7.1 根本不起作用,因为在加密期间无法检索身份验证标签,因此没有它解密将始终失败。
如果安装了 mcrypt,您可以通过 mcrypt_list_modes
检查 GCM 是否可用,但我非常怀疑。