0

PHP エンジン バージョン 5.4.34 を実行している共有 Web ホスティング アカウントで以下を実行する必要があります。(つまり、サードパーティのライブラリをインストールできません。)

バイナリ文字列にGalois/Counter Mode (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);

これは PHP < 7.1 ではまったく機能しないことをコメントで指摘してくれた Scott Arciszewski に感謝します。これは、暗号化中に認証タグを取得できず、復号化が常に失敗するためです。

mcrypt がインストールされている場合は、GCM が利用可能かどうかを で確認できますがmcrypt_list_modes、私はそれを非常に疑わしく思っています。

于 2015-02-03T09:19:01.773 に答える