我需要在运行PHP引擎版本5.4.34的共享Web主机帐户上运行以下命令。 (即我无法安装任何第三方库。)
是否有标准函数在二进制字符串上实现Galois/Counter Mode(GCM)经过身份验证的加密(AES标准)?
答案 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是否可用,但我对此非常怀疑。