2011-06-20 14 views
0

私はmcryptを使って暗号化されたphpファイルを持っています。これを解読する必要があります。ここでevalを使って暗号化されたファイルを読む

は、復号ある:

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する方法はありますか?それとも私の唯一の選択肢ですか?

答えて

4

PHPファイルで実行する必要がある場合は、php cli ..にパイプすることができますが、それは同じです。しかし、どのようにあなたがそれを実行せずにPHPファイルを実行したいと思う:)

+0

@Gabi、結論ではそう、私は'eval()'を使う必要がありますか? – Neal

+0

@Nealには〜to_する必要はありませんが、他の解決策には同様のセキュリティ問題があります。 –

+0

@Gabi、ファイルを暗号化すれば本当に問題にはなりませんか?私たちがそれをしたのは唯一の理由ですから、クライアントはそれを使ってもらえません。 – Neal

1

あなたは、一時ファイルに復号されたコンテンツを格納し、それを含めて、その後に削除できます:?

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

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

include $tmpFile; 

unlink($tmpFile); 
+0

が表示されます。問題は、暗号化されたファイルに含まれているものを見ることができるということです( – Neal

+0

)。親スクリプトには、ファイルを復号化するために必要なメソッド(キー+アルゴリズム)が含まれているため、本質的にセキュリティがゼロになっています。 –

+0

@MarcBこのコードがあるファイルは難読化されています(クライアントはそれをまったく読み取ることができません) – Neal

関連する問題