3

ファイルの復号化に使用するこのPHP関数(PHP 5.3を使用)があり、以前は正常に機能していましたが、Amazon EC2(Amazon Linux Image 2012.3に基づく)に移行したため、mcryptのインストールが破損しているか、まったく利用できません。

最初のテストでは、ファイルの復号化は小さいファイルでは機能しますが、20MB以上のファイル(特に大きなサイズではありません)では機能しないことが示されています。

この行まで問題を追跡しました。これにより、エラー500が発生します(取得できません。500サーバーエラーのみです) 。mcrypt_module_open is undefined

$td = mcrypt_module_open ('rijndael-128', '', 'cbc', '');

奇妙なことに、私は/etc/php.iniをチェックしましたが、mcryptがまったく表示されません(もちろん、正しいphp.ini/pathを見ていると仮定します!)

PHPのコード/関数は次のとおりです。

function decrypt_file ($inputfile, $outputfile)
{
    $key        = FILE_KEY;  // <-- assign private key
    $buffersize = 16384;

    // Open $inputfile for reading binary
    $input      = fopen ($inputfile, 'rb');

    // Error opening $inputfile, return false
    if (!$input)
        return false;

    // Open $outputfile for writing binary
    $output     = fopen ($outputfile, 'wb');

    // Error opening $outputfile, return false
    if (!$output)
        return false;

    // Open the cipher module
    $td = mcrypt_module_open ('rijndael-128', '', 'cbc', '');

    // Read the IV from $inputfile
    $iv = fread ($input, 16);

    // Compute the SHA512 of the IV (salt) and Key and use 32 bytes (256 bit) of the result as the encryption key
    $keyhash = substr (hash ('sha512', $iv . $key, true), 0, 32);

    // Intialize encryption
    mcrypt_generic_init ($td, $keyhash, $iv);

    while (!feof ($input))
    {
        $buffer = fread ($input, $buffersize);

        // Encrypt the data
        $buffer = mdecrypt_generic ($td, $buffer);

        // Remove padding for last block
        if (feof ($input))
        {
            $padsize = ord ($buffer[strlen ($buffer) - 1]);
            $buffer  = substr ($buffer, 0, strlen ($buffer) - $padsize);
        }

        // Write the encrypted data to $output
        fwrite ($output, $buffer, strlen ($buffer));
    }

    fclose ($input);
    fclose ($output);

    // Deinitialize encryption module
    mcrypt_generic_deinit ($td);

    // Close encryption module
    mcrypt_module_close ($td);

    return true;
}

誰もがそれを修正する方法を知っていますか?私はCodeIgniter2.1でPHP5.3を使用しています(これはCodeIgniterに関連していない可能性が高いと思います)

4

1 に答える 1

5

mcryptがインストールされていないようです。実行してみてください:

sudo yum install php-mcrypt

...インスタンスのコマンドラインから。

于 2012-05-15T11:30:47.347 に答える