2012-04-13 14 views
1

私はmoodleシステムで作業していますが、md5 salt hashingを使用しています。私はいくつか来て、私はPHPの基本的な知識しか持っていないので、多分あなたは私にそれを探検することができますが見つかりました。PHPコードmd5ハッシングの説明

function validate_internal_user_password($user, $password) { 
global $CFG; 

if (!isset($CFG->passwordsaltmain)) { 
    $CFG->passwordsaltmain = ''; 
} 

$validated = false; 

if ($user->password === 'not cached') { 
    // internal password is not used at all, it can not validate 

} else if ($user->password === md5($password.$CFG->passwordsaltmain) 
     or $user->password === md5($password) 
     or $user->password === md5(addslashes($password).$CFG->passwordsaltmain) 
     or $user->password === md5(addslashes($password))) { 
    // note: we are intentionally using the addslashes() here because we 
    //  need to accept old password hashes of passwords with magic quotes 
    $validated = true; 

} else { 
    for ($i=1; $i<=20; $i++) { //20 alternative salts should be enough, right? 
     $alt = 'passwordsaltalt'.$i; 
     if (!empty($CFG->$alt)) { 
      if ($user->password === md5($password.$CFG->$alt) or $user->password === md5(addslashes($password).$CFG->$alt)) { 
       $validated = true; 
       break; 
      } 
     } 
    } 
} 

if ($validated) { 
    // force update of password hash using latest main password salt and encoding if needed 
    update_internal_user_password($user, $password); 
} 

return $validated; 

}

単純なテキストを入力した後、それはハッシュ化されるようになったであろうと、それを変更するのは難しいでしょうか?

+1

あなたの質問は意味がありません。あなたがしようとしていることは完全には不明です。 – ceejayoz

+0

データベースに接続してデータを取得するJavaアプリケーションを作成していますが、問題があります。 Webページを使用すると、パスワードが変更されました。上記のコードは、それがどのように変更されるべきかを示します。しかし、私はそれを手に入れておらず、もし誰かがそれを私に説明できるのであれば、 – LTnewbie

+1

MoodleのWebサービスAPIを使ってください。データベースを直接使用しないでください。 Moodleはそれだけで十分に壊れています...悪化させないでください。 – Brad

答えて

1

これは、従来のパスワードを使用したパスワード検証です。

ことができるようになりますパスワードの5つの形式があります:

  • は、MD5(パスワード)
  • MD5(にaddslashes(パスワード))
  • は、MD5(パスワード+一般的な塩)
  • は、MD5(addslashed )+一般的な塩)
  • MD5(パスワード+ saltX)

まず物事まず、md5とは何ですか? md5は「メッセージダイジェスト5」です。長いストーリーは、文字列を32文字の文字列に変換する関数です。hashを呼び出します。 hashの主な特性は、元の文字列を元に戻すのは難しいことです。パスワードの保管に最適です。 :)

しかし、パスワードだけでは不十分です。パスワードが「ドラゴン」(非常に悪いパスワードbtw)であるとします。 md5の "dragon"が "8621ffdbc5698829397d97767ac13db3"であることが分かった場合は、hashを見るだけでパスワードを知ることができます。だから、あなたは「塩」と呼ばれるものを加えます。これは、ハッシングの前にパスワードに追加する別の単語です。

ご塩「notsob1gs3cret」である場合、パスワードは、本質的になり、「dragonnotsob1gs3cret」である:「8621ffdbc5698829397d97767ac13db3」のようなものを見ていない「c47948e6b966357f1b9a3732c4ee7c72」。これはハッシュのもう1つの特性です。類似した入力は、類似していない出力を生成する必要があります。

攻撃者が「notsob1gs3cret」というsaltを見たことがない場合、元のパスワードを推測するのは簡単ではありません。

コードについては、 addslashesは無視してください。これはおそらく、いくつかの古いバグです。後で誰かが塩漬けのメカニズムを追加しようとしたように見えても、古いパスワードはすべて動作させたかったようですが、ちょっと面倒です。理想的には、有効なパスワードメカニズムを1つだけ持ち、より弱いセキュリティをアップグレードします。

20種類の塩がありますが、どちらかといえばコードが使用されていないようです。それは不思議で、潜在的に安全ではない可能性があります。

は、テキストのビットをハッシュするだけで実行します。

$text = "a bit of text"; 
var_dump(md5($text)); 
+0

どのような塩の言葉が使われているか知るには? – LTnewbie

+0

それは彼が知らない点です、彼はただそれらのすべてを試みます。もちろん、一致が見つかると、どのパスワードが使用されているかわかりますが、有効なパスワードも必要です。 – Halcyon

+0

非常に有用です、ありがとう。 – Norse