PHP エンジン バージョン 5.4.34 を実行している共有 Web ホスティング アカウントで以下を実行する必要があります。(つまり、サードパーティのライブラリをインストールできません。)
バイナリ文字列にGalois/Counter Mode (GCM) 認証暗号化 ( AES標準)を実装する標準機能はありますか?
PHP エンジン バージョン 5.4.34 を実行している共有 Web ホスティング アカウントで以下を実行する必要があります。(つまり、サードパーティのライブラリをインストールできません。)
バイナリ文字列にGalois/Counter Mode (GCM) 認証暗号化 ( AES標準)を実装する標準機能はありますか?
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
、私はそれを非常に疑わしく思っています。