PHPのZiparchiveクラスは、ZIP圧縮ファイルの作成と操作に使用されます。 Ziparchive自体は、OpenSSL拡張機能と組み合わせて暗号化機能を直接サポートしていませんが、圧縮パッケージの暗号化と復号化処理を実装してファイルセキュリティを改善できます。
ZiparchiveおよびOpenSSL拡張機能がPHP環境で有効になっていることを確認し、PHP.iniで拡張= ZIPおよび拡張= OpenSSLを有効にすることができます。
まず、ziparchiveを使用してzipファイルを作成し、ターゲットファイルを圧縮パッケージに追加します。圧縮されたファイルコンテンツは、OpenSSLの暗号化関数を介して暗号化されます。サンプルコードは次のとおりです。
<?php
$zip = new ZipArchive();
$zipname = 'encrypted.zip';
if ($zip->open($zipname, ZipArchive::CREATE) === TRUE) {
// ファイルを追加します
$zip->addFile('data.txt', 'data.txt');
$zip->close();
// 圧縮されたパケットデータを読んで暗号化します
$zipdata = file_get_contents($zipname);
$encryptedzip = openssl_encrypt($zipdata, 'AES-128-CBC', 'password', OPENSSL_RAW_DATA, '1234567890123456');
file_put_contents($zipname, $encryptedzip);
echo '圧縮パッケージは暗号化されています。';
} else {
echo '圧縮パッケージの作成に失敗しました。';
}
?>
上記の例では、AES-128-CBCアルゴリズムが使用され、パスワードはパスワード、初期化ベクトルは1234567890123456です。必要に応じて、暗号化アルゴリズムとキーを調整できます。
復号化するときは、OpenSSLの復号化関数を使用して圧縮パケットデータを復元し、Ziparchiveを使用して減圧します。サンプルコードは次のとおりです。
<?php
$zipname = 'encrypted.zip';
// 暗号化された圧縮パッケージの内容を読み取ります
$encryptedzip = file_get_contents($zipname);
// 復号化
$decryptedzip = openssl_decrypt($encryptedzip, 'AES-128-CBC', 'password', OPENSSL_RAW_DATA, '1234567890123456');
file_put_contents($zipname, $decryptedzip);
// 打开復号化后的压缩包并解压
$zip = new ZipArchive();
if ($zip->open($zipname) === TRUE) {
$zip->extractTo('unzip/');
$zip->close();
echo '压缩包已復号化并解压缩。';
} else {
echo '圧縮パッケージを開くことができませんでした。';
}
?>
同じアルゴリズムとキーは、データが正しく回復されるように暗号化されたときのように、復号化ステップで使用されます。
PHPのZiparchiveクラスとOpenSSL拡張を組み合わせることにより、ZIPファイルの暗号化と復号化を効果的に実現し、送信中およびストレージ中のファイルのセキュリティを強化します。この記事の例と指示が、この機能をプロジェクトに適用するのに役立つことを願っています。