2012-03-26 32 views
2

私はここに少しのジレンマを持っています。私は対応するパスワードで、ユーザーのdrupal 7データベーステーブルを持っています。これらのパスワードはすべて当然暗号化されています。私の仮定は、これらはMD5のハッシュですが、かなりです。Drupal 7パスワードハッシュ

ここでの挑戦は、類似の資格情報を使用している別のWebサイトで同じユーザーを利用していますが、別の技術[これは私を単なるポーン]に責めないでください。

Drupalがパスワードを暗号化する方法を知っていたら、それらを復号化してバックエンドのロジックに適用することができますか?

+2

Drupalがプレーンなmd5を使用しないことを願っています。 – CodesInChaos

+1

これを解読することはできませんが、同じ方法でハッシュすることができます。 – CodesInChaos

+0

@ CodeInChaos私はDrupalがMD5を使用することさえ疑っています。 – NullUserException

答えて

6

これらのパスワードはhashedであり、暗号化されていないことに注意してください。ハッシングと暗号化の基本的な違いは、暗号化を使用すると元のパスワードを回復できることです。あなたがハッシュされているとき(努力をしていなくても)、それをすることはできません。それは設計によるものです。

ハッシュブラウンを考えてみましょう。ハッシュブラウンを作った場合、元のジャガイモを元に戻すことはできません。これは、ハッカーがシステムを侵害してデータベースにアクセスすると、元のパスワードを表示または復元できないようにするためです。

したがって、ユーザーが正しいパスワードを入力したかどうかを確認するにはどうすればよいですか?ユーザーがログインしてパスワードを入力しようとすると、ユーザー入力に同じ機能が適用され、出力がデータベースに格納されているものと同じものかどうかが確認されます。ハッシュ関数はdeterministicなので、同じ入力では常に同じ出力が得られます。

同じハッシュで複数のアプリケーションを動作させるには、ユーザーを認証しようとするときに同じ機能をパスワードで使用する必要があります。 Drupalはおそらく1つまたは複数のsaltsも使用しますが、それは重要ではありません。アプリケーションで同じロジックが使用されている限り、ハッシュは常に完全に互換性があります。

は、Drupalはその認証システム(非常に単純化された擬似っぽいコード)として、このようなものを使用しているとします

/* 
    input: user-entered $username and $password 
    output: true if authorized, false otherwise 
*/ 
function auth($username, $password) 
{ 
    $salt = 'some random salt'; 

    // input is sanitized somewhere, somehow 
    $hash_from_db = db_result('SELECT hash FROM users WHERE username = "$username"'); 
    $hashed_input = sha1($password . $salt); 

    if ($hash_from_db != $hashed_input) 
     return false; 
    else 
     return true; 
} 

あなたの他のアプリケーションがそのユーザーを認証するためにまったく同じことを使用している場合、それが正常に動作します。 Drupalの認証方式はおそらくもっと複雑になるでしょうが、それをあなたに夢中にさせてはいけません。それはまさにDrupalと同じことをすることです。


Drupalの場合は、ここから開始できます:user_hash_password()

+0

叙事詩!ありがとう! – user1020069

+0

明白な質問、誰も持っています – user1020069

+0

答えは正しいですが、問題を解決するために私はまず他の可能性を見ていきます。 drupal ususalyを使用すると、 "そのためのモジュールがあります"。例えば。 http://drupal.org/project/oauthまたはコアOpenIDモジュール –

0

drupalメソッドを使用して、includes/password.incの user_check_password($ password、$ account)のプレーンテキストパスワードが有効かどうかを確認できます。