1

私はmoodleシステムで作業していますが、md5ソルトハッシュを使用していることがわかりました. 私はphpの基本的な知識しか持っていないので、いくつか来ているのを見つけたので、説明してくれるかもしれません。

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;

}

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

4

1 に答える 1

1

これは、一部のレガシー パスワードを使用したパスワード検証です。

許可されるパスワードには 5 つの形式があります。

  • md5(パスワード)
  • md5(addslashes(パスワード))
  • md5(パスワード + 一般的なソルト)
  • md5(addslashed) + 一般的なソルト)
  • md5(パスワード + saltX)

まず最初に、md5 とは何ですか? md5 は「メッセージ ダイジェスト 5」です。簡単に言うと、文字列を a と呼ばれる 32 文字の文字列に変換する関数hashです。の主な特性はhash、元の文字列を元に戻すのが難しい (計算上難しい) ことです。パスワードの保管に最適ですよね?:)

しかし、パスワードだけでは十分ではありません。パスワードが "dragon" だと想像してください (非常に悪いパスワードです)。たまたま「dragon」が md5 で「8621ffdbc5698829397d97767ac13db3」であることがわかっている場合は、パスワードを見るだけでパスワードを知ることができますhash。そこで、いわゆる「塩」を加えます。これは、ハッシュする前にパスワードに追加する別の単語です。

あなたのソルトが「notsob1gs3cret」の場合、パスワードは基本的に「dragonnotsob1gs3cret」であり、「c47948e6b966357f1b9a3732c4ee7c72」になり、「8621ffdbc5698829397d97767ac13db3」のようには見えません。これはハッシュのもう 1 つのプロパティです。似ている入力は、まったく似ていない出力を生成する必要があり、ランダムな単語とほぼ同じくらい似ています。

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

だからあなたのコードについて。アドオンスラッシュは無視してください。これは、おそらくレガシー バグによるものです。誰かが後でソルティング メカニズムを追加しようとして、古いパスワードをすべて機能させようとしたようですが、少し不器用に見えます。理想的には、有効なパスワード メカニズムを 1 つだけ使用し、脆弱なセキュリティをアップグレードします。

20 種類のソルトがありますが、これは公正な考えだと思います..しかし、コードはどのソルトが使用されたかを認識していないようです..すべてのソルトを試しますか? それは奇妙で、安全でない可能性があります。

テキストの一部をハッシュするには、次のようにします。

$text = "a bit of text";
var_dump(md5($text));
于 2012-04-13T19:28:08.800 に答える