1

Zend_Filter_Encryptメモリ制限を許容できない量に引き上げることなく、大きなファイルで使用する方法はありますか?

これはこれまでの私のコードですが、32 MB(メモリ制限)を超えるファイルを暗号化する必要がある場合、メモリを48 MBに設定すると、失敗します。

$vector = 'XX';

$algorithm = 'rijndael-192';

$options = array(
    'adapter'   => 'mcrypt',
    'vector'    => $vector,
    'algorithm' => $algorithm,
    'key'       => $key
);

$encrypt = new Zend_Filter_File_Encrypt($options);
$result = $encrypt->filter($file);
4

1 に答える 1

2

いいえ、ありません。 Zend_Filter_Encrypt1回のパスでデータを暗号化/復号化することで機能するため、機能するには完全なデータが必要です。

大きなファイルを復号化する必要がある場合は、小さなチャンクで手動で行うことができます。

<?php

$key    = 'secret key';
$iv     = 'xxxxxxxxxxxxxxxx';
$cipher = mcrypt_module_open('rijndael-192', '', 'cbc', '');

mcrypt_generic_init($cipher, $key, $iv);

$fp = fopen('/tmp/encrypted.txt', 'r+b');
while (!feof($fp)) {
    $data = fread($fp, 1154);

    $decrypted = mdecrypt_generic($cipher, $data);

    echo $decrypted;
}

fclose($fp);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);

読み取る (fread) データの量が、アルゴリズムで使用されるブロック サイズの倍数であることを確認してください。そうしないと、予期しない結果になる可能性があります。

于 2012-06-17T06:41:50.690 に答える