通常、openssl_encrypt
PHP で AES を使用して単純な文字列を暗号化するために使用しますが、これはかなりうまく機能します。
ここで、AES-256-CTR モードでファイルを暗号化する必要がありますが、これを行う唯一の方法file_get_contents
は、ファイルのコンテンツ全体を暗号化してから、openssl_encrypt
関数に送信して実際のファイル データを暗号化することです。問題は、メモリの重大な浪費のため、この方法が非常に「貧弱」であることです。
1) PHP OpenSSL でチャンク データを処理する方法はありますか?
例えば:
<?php
// ...
$f = fopen('large.iso','r');
while(feof($f)){
$chunk = fread($f,16);
$cipher = openssl_encrypt(...$chunk...);
// ... code ...
}
// ... more code ...
?>
2)openssl_encrypt
公式ドキュメントはまだ公開されていません。AES-CTRモードで使用する関数のパラメーターの意味を誰かが明確にすることができますか? カウンターは自動的に処理されますか? 関数によって返されたデータに手動で XOR を適用する必要がありますか?
注: これはプロのプロジェクトなのでphpseclib
、他の人の「匿名」ライブラリを使用したくありません。また、コマンド ラインも使用したくありません。