用于PHP的GCM身份验证加密功能

时间:2015-02-03 03:40:43

标签: php encryption encryption-symmetric aes-gcm

我需要在运行PHP引擎版本5.4.34的共享Web主机帐户上运行以下命令。 (即我无法安装任何第三方库。)

是否有标准函数在二进制字符串上实现Galois/Counter Mode(GCM)经过身份验证的加密(AES标准)?

1 个答案:

答案 0 :(得分: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);

感谢Scott Arciszewski在评论中注意到这根本不适用于PHP< 7.1,因为在加密期间无法检索身份验证标记,因此如果没有它,解密将始终失败。

如果安装了mcrypt,您可以通过mcrypt_list_modes检查GCM是否可用,但我对此非常怀疑。