0

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

是否有标准函数在二进制字符串上实现伽罗瓦/计数器模式(GCM) 认证加密(AES标准)?

4

1 回答 1

0

如果没有安装 OpenSSL,那么除了在 Web 上寻找一个普通的 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,你可以通过 来检查 GCM 是否可用mcrypt_list_modes,但我非常怀疑。

于 2015-02-03T09:19:01.773 回答