5

AESを使用してPHPで(大きな)ファイルを暗号化しようとしていますが、McryptとOpenSSLの使用を検討しました.問題は、これまでに見つけたすべてのソリューションが文字列を暗号化するだけであり、暗号化しようとしているファイルが最大PHP のメモリ制限 (残念ながらこれを高く設定することはできません)、どうすればこれを達成できますか?

4

4 に答える 4

2

AES-128-CBCアルゴリズムをopenssl_encrypt()使用して大きなファイルでも暗号化および復号化する 2 つの関数を公開しました。

このopenssl_encrypt()を参照してください。

于 2016-11-10T12:04:23.223 に答える
1

更新された回答

大きなファイルの暗号化は、「チャンク」が改ざんされていないことを確認するのが難しいため、難しい問題です。

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

サンプルコードです

于 2015-06-09T20:55:58.857 に答える