AESを使用してPHPで(大きな)ファイルを暗号化しようとしていますが、McryptとOpenSSLの使用を検討しました.問題は、これまでに見つけたすべてのソリューションが文字列を暗号化するだけであり、暗号化しようとしているファイルが最大PHP のメモリ制限 (残念ながらこれを高く設定することはできません)、どうすればこれを達成できますか?
4 に答える
AES-128-CBCアルゴリズムをopenssl_encrypt()
使用して大きなファイルでも暗号化および復号化する 2 つの関数を公開しました。
このopenssl_encrypt()を参照してください。
更新された回答
大きなファイルの暗号化は、「チャンク」が改ざんされていないことを確認するのが難しいため、難しい問題です。
https://github.com/defuse/php-encryptionなどのライブラリを使用します
\Defuse\Crypto\File::encryptFile( 'in.file', 'out.file', $key );
-- 古い回答 --
http://www.shellhacks.com/en/Encrypt-And-Decrypt-Files-With-A-Password-Using-OpenSSL
$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc
メモリを使いすぎないようにするには、ストリーム暗号が必要です。バッククォートを使用して PHP でこれを呼び出す `
または shell_exec を使用
変数がユーザー入力でないことを確認してください (例: ユーザーは file.txt を制御できません)。それらを自分で生成します。
編集
shell exec が利用できないため
http://jeremycook.ca/2011/03/20/easy-file-encryption/
そこに解決策があります。とはいえ、私はこれを十分に強調することはできません。ストリーム暗号は難しいです。そこのコードを完全にレビューしたことはありませんし、自分に能力があるとは思いません。オープン SSL を直接使用する方がはるかに優れたオプションです
http://php.net/manual/en/filters.encryption.php
サンプルコードです