0

私は迅速な解決策を必要とする問題に取り組んでいます。説明しようと思います。

私はテーブルwp_user(WordPressから)を持っています。ここでは、すべてのメンバーがワードプレス暗号化機能で暗号化されたパスワードを持っています。そして、Codeigniterを使用する新しいWebサイトの新しいMysqlデータベースにこのテーブルを転送する必要があります。

codeigniterで動作する新しいサイトの新しいメンバーの場合、パスワードをマスクするためにMD5関数を使用します。

しかし、問題は2つの機能が異なることです。そのため、古いユーザーが私の新しいWebサイトに接続しようとすると、パスワードが一致しないために機能しません...

では、WordPressの暗号化を通常のMD5パスワードに翻訳するにはどうすればよいですか?

または多分それは不可能ですか?

4

2 に答える 2

1

残念ながら、両方のチェックを実行するか、WPと同じハッシュスキームを使用するようにCIを変更する必要があります。それはおそらくより簡単なオプションです。本当にデフォルトのCIハッシュスキームの使用を開始したい場合は、両方のハッシュを保存し、ログインが成功したときに新しいハッシュを更新できます(プレーンテキストのパスワードがある場合)。

于 2012-09-03T17:09:59.883 に答える
1

Wordpressがパスワードにどのようなハッシュを使用するかはよくわかりませんが、安全で元に戻せないと思います。ハッシュは一方向のアルゴリズムであるため、ハッシュされたパスワードを同等のMD5に変換することはできません。

これがあなたへの私の提案です:

using_md5_flagデフォルト値を使用して、新しいWebサイトのusersテーブルにブール列を追加します0。パスワードをWordpressから列にコピーし、 「ユーザーがシステムにログインするときwppasswordに」という列を作成しますmd5password。次のコードを実行します(Datamapper ORMを想定し、必要に応じてActive Recordに変換します)。

$u = new User();
$u->where('username', $this->input->post('username'))->get();

$y = new User();
$y->where('username', $this->input->post('username'));
if($u->using_md5_flag){
    /*the flag is 1*/
    $y->where('md5password', md5($this->input->post('password')));
    $y->get();
    if($y->exists()) echo "setting cookie and redirecting to logged in area";
    else echo "Wrong credentials!";
}

else{
    /*the flag is 0, use wordpress's hashing algorithm (not sure what this is)*/
    $y->where('wppassword', wp_hashing_algo($this->input->post('password')));
    $y->get();
    if($y->exists()){
        /*set the using_md5_flag flag so next time they log in it will ignore wp's*/
        $y->using_md5_flag = 1;
        /*set the new md5 password.*/
        $y->md5password = md5($this->input->post('password'));
        $y->save();
        echo "setting cookie and redirecting to logged in area";
    }
    else{
        echo "Wrong credentials.";
    }
}

このコードはテストされていません。StackOverflowのエディター内で記述しました...しかし、これは、より安全なハッシュへの低速変換を実行するために使用する方法です。最後に、本当に安全なハッシュを探している場合は、Bcrypt(phpass)をチェックしてください。レインボーテーブル攻撃に対してより耐性があります。


更新1: CodeIgniterでPhpassライブラリを使用する必要がある場合は、ここで変更したコピーを見つけることができます(コンストラクターを追加しました)。これを入れてlibraries/Phpass.phpくださいあなたは以下を使ってあなたのコントローラーでライブラリーを使うことができます:

$this->load->library("phpass", array("iteration_count_log2" => 8, "portable_hashes" => FALSE));
$check = $this->phpass->CheckPassword($this->input->post('password'), $u->password);
if($check) /*logged in*/
else /*wrong credentials.*/

Phpassファイルをダウンロードするとtest.php、関数の動作をデモするファイルが付属しています。確認することをお勧めします。

于 2012-09-03T17:36:31.037 に答える