Использование eval для чтения зашифрованного файла - PullRequest
0 голосов
/ 20 июня 2011

У меня есть php-файл, который был зашифрован с использованием mcrypt, и теперь нам нужно его расшифровать.

Вот расшифровка:

abstract class Encryption_Abstract {
    const CYPHER = 'blowfish';
    const MODE = 'cfb';
    protected $key;
    public
    function __construct($key) {
        $this->key = $key;
    }
    public function encrypt($plaintext) {
        return $plaintext;
    }
    public function decrypt($crypttext) {
        return $crypttext;
    }
}
//decryptor
class Decryption extends Encryption_Abstract {
    function decrypt($crypttext) {
        $plaintext = '';
        $td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
        $ivsize = mcrypt_enc_get_iv_size($td);
        $iv = substr($crypttext, 0, $ivsize);
        $crypttext = substr($crypttext, $ivsize);
        if ($iv) {
            mcrypt_generic_init($td, $this - > key, $iv);
            $plaintext = mdecrypt_generic($td, $crypttext);
        }
        return $plaintext;
    }
}

Теперь вот как мы его создаеми затем используйте его:

$enc = new Decryption(KEYS::PROD);  //KEYS::PROD is the decryption key
eval($enc->decrypt(file_get_contents("key_file.txt"))); //<--

Есть ли способ не использовать eval?или это мой единственный вариант?

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Если это файл PHP и вам нужно его выполнить, вы можете передать его в php cli .., но это будет то же самое. Но как бы вы захотели выполнить файл PHP, не выполняя его?:)

1 голос
/ 20 июня 2011

Вы можете сохранить расшифрованное содержимое во временном файле, включить его и удалить после этого:

$contents = $enc->decrypt(file_get_contents("key_file.txt"));

$tmpFile = tempnam('/tmp', 'decrypted.');
file_put_contents($tmpFile, $contents);

include $tmpFile;

unlink($tmpFile);
...