2012-05-15 211 views
3

我有這個PHP函數(使用PHP 5.3),我用它來解密文件,它曾經工作得很好,但現在,我搬到了亞馬遜的EC2,它似乎mcrypt安裝已損壞或根本不可用。PHP mcrypt_module_open導致500錯誤

初步測試表明,文件解密並在較小的文件的工作,但不能在20MB +文件(這是不是一個特別大的大小)。

我跟蹤這個問題到這條線,這是造成錯誤500(我越來越mcrypt_module_open is undefined僅有500服務器錯誤

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

有什麼奇怪的,我查/etc/php.ini,我根本看不到mcrypt(假設我正在查看正確的php.ini /路徑!)

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; 
} 

任何人知道如何解決這個問題?我使用PHP 5.3和CodeIgniter 2.1(認爲這很可能是與CodeIgniter無關

+1

這是什麼'的var_dump(function_exists( 'mcrypt_module_open'));'說什麼?它說「TRUE」,錯誤日誌說什麼? – DaveRandom

+0

不,它說'bool(false)',所以我想我需要安裝模塊或啓用它? – TheDude

+1

是的,看起來你沒有安裝mcrypt。嘗試從您的實例的命令行運行'sudo yum install php-mcrypt'。 – DaveRandom

回答

5

看起來你沒有安裝mcrypt。嘗試運行:

sudo yum install php-mcrypt 

...從您的實例上的命令行。

+0

怎麼樣的Mac OSX(yostemite最新的),安裝mcrypt的模塊以及..但仍然得到使用 「AES.php」 .. 500內部服務器錯誤..功能mcrypt_encrypt() – idleMind

+0

@idleMind沒有一個完整的錯誤信息,couldn甚至不會猜測... – DaveRandom