2010-12-20 10 views
3

codeigniterの暗号化クラスを使用する暗号化パスワードは、2つの異なるマシンで同じ暗号化パスワードを生成しますか?たとえば、私は一部のホストとオンラインでプロダクションサイトを持っており、私は自分のコンピュータにローカルインストールを持っています。しかし、私はデータベースを復元するときにパスワードが一致しません。プロダクションサーバーとローカルサーバーでのコード署名の暗号化

答えて

0

コードが表示されていないと、問題の原因を突き止めることができません(これがまだ解答していない理由です)。ただし、同じ暗号化キーを使用している限り、同じ方法で文字列を暗号化している場合は、同じ暗号化キーを使用する必要があります。 CIの暗号化クラス(see here)では、あなたはこのようなconfig.phpファイルでこれを行うことができます..私はこれが古い質問ですけど

$config['encryption_key'] = "YOUR KEY"; 
+0

ええ、私はこれらの設定はサーバーと開発マシンで同じです。しかし、彼らはアプリにログインしたり、ログアウトしたりすることはできません。コードはサーバーと開発マシンで同じです。 – Karl

2

が、私は同じ問題を抱えていたし、それを考え出し

CodeIgniterの暗号化ライブラリは、さまざまな環境で動作が異なります。具体的には、PHP mcryptエクステンションがインストールされているかどうかをライブラリが自動的に検出し、そうでない場合とは全く異なるアルゴリズムを使用します。

あなたのサーバにはmcryptがインストールされていて、開発環境にはインストールされていない可能性があります。

これを解決するには2通りの方法があります。常にmcryptのを使用し、それがインストールされていない場合は大声で失敗:

オプション1:いずれかの方法で、あなたはMY_Encrypt.phpクラスを作成することにより、組み込みの暗号化クラスを拡張する必要があり

class MY_Encrypt extends CI_Encrypt 
{ 
    public function __construct() 
    { 
     if (! function_exists('mcrypt_encrypt')) { 
      throw new Exception("Encryption requires mcrypt PHP extension!"); 
     } 

     parent::__construct(); 
    } 
} 

オプション2:それがインストールされている場合でも、mcryptのは絶対に使用しないでください:

class MY_Encrypt extends CI_Encrypt 
{ 
    public function __construct() 
    { 
     parent::__construct(); 

     //Pretend Mcrypt doesn't exist no matter what 
     $this->_mcrypt_exists = FALSE; 

    } 
} 

これは、CodeIgniterの暗号化は、すべての環境で同じように動作するようになります。

IMHOでは、暗号化ライブラリはではありません。は、環境に基づいて暗号化に使用されるアルゴリズムを自動的に変更する必要があります。オートマティック暗号化アルゴリズムの変更はひどい考えです。

+0

私はもう少し投票します。私はいくつかのゴミデータで終わってしまい、それを理解できませんでした。 m_crypt関数が無効になりました。今私は古いデータをm_cryptで解読し、新しい方法で暗号化する必要があります。ただのばかな愚か! – machineaddict

+0

オプション2は私にとってうまくいきます。 –

1

私はこの答えを探していたが、私はそれは多分漠然とし、解決策を考え出したが、初心者のための十分なシンプルでなければなりません:

  1. は libmcryptのをインストールし、のphp-mcryptのをインストールします。

  2. php.iniファイルを編集します。いくつかのディストリビューションは異なるかもしれませんが、私の所在地は以下の通りです:/etc/php/php.ini

  3. すべての拡張子がどこにあるかを見つけて、コメントを追加するか、php.iniファイルに次の行を追加してください。

    拡張子= mcrypt.so

  4. Apacheを再起動または任意のウェブサーバあなたが使用しています。

0

これはconfig.phpファイルで使用します。それはあなたに異なるキーを与えますが、結果は同じになります:

$config['encryption_key'] = "YOUR KEY"; 
関連する問題