2012-04-13 5 views
1

Ich arbeite mit dem Moodle-System, aber es stellt sich heraus, dass es MD5 Salz Hashing verwendet. Ich habe einige gefunden, also könntest du es mir erklären, weil ich nur Grundkenntnisse in php habe.PHP Code MD5 Hashing Erklärung

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; 

}

wäre es schwer, es zu ändern, dass nach einem einfachen Texteingabe wäre es gehasht wurde?

+1

Ihre Frage macht keinen Sinn. Es ist völlig unklar, was Sie zu tun versuchen. – ceejayoz

+0

Ich erstelle eine Java-App, die eine Verbindung zur Datenbank herstellen und Daten daraus abrufen würde, aber es gibt ein Problem. Die Verwendung eines auf der Webseite registrierten Passwortes wurde geändert. Dieser Code sollte die Art und Weise, wie es geändert wird, sein. Aber ich bekomme es nicht und ich würde gerne, wenn mir jemand es erklären könnte – LTnewbie

+1

Benutze Moodle's Web Service API.Verwenden Sie die Datenbank nicht direkt. Moodle ist so kaputt wie es ist ... mach es nicht schlimmer. – Brad

Antwort

1

Dies ist eine Passwort-Validierung mit einigen Legacy-Passwort in ihnen.

Es gibt 5 Arten von Passwörtern wird es ermöglichen:

  • md5 (Passwort)
  • md5 (addslashes (Passwort))
  • md5 (Passwort + Generika Salz)
  • md5 (addslashed) + Generika Salz)
  • md5 (Passwort + saltX)

First things Erstens, was ist MD5? MD5 ist "Message Digest 5". Lange Rede, kurzer Sinn, es ist eine Funktion, um eine Zeichenkette in eine 32-Zeichen-Zeichenkette umzuwandeln, rufen Sie eine hash. Die Haupteigenschaft der hash ist, dass es schwer ist (wie in rechnerisch schwer), die ursprüngliche Zeichenfolge zurück zu bekommen. Ideal zum Speichern von Passwörtern, oder? :)

Aber ein Passwort allein ist nicht genug. Stellen Sie sich Ihr Passwort ist "dragon" (sehr schlechtes Passwort BTW). Wenn Sie wissen, dass "dragon" "8621ffdbc5698829397d97767ac13db3" in md5 ist, können Sie das Passwort nur durch Blick auf die hash kennen. Also fügst du etwas hinzu, was "Salz" genannt wird. Das ist nur ein weiteres Wort, das dem Kennwort vor dem Hash hinzugefügt werden muss.

Wenn Ihr Salz „notsob1gs3cret“ das Passwort im Wesentlichen „dragonnotsob1gs3cret“ ist, was dazu führt: „c47948e6b966357f1b9a3732c4ee7c72“ die nichts sehen aus wie „8621ffdbc5698829397d97767ac13db3“. Dies ist eine weitere Eigenschaft eines Hashs. Eine ähnliche Eingabe sollte eine Ausgabe erzeugen, die überhaupt nicht ähnlich ist, so dass sie fast so ähnlich ist wie ein zufälliges Wort.

Wenn Ihr Angreifer das Salz "notsob1gs3cret" nie gesehen hat, wird es für ihn nicht so einfach sein, das ursprüngliche Passwort zu erraten.

Also über Ihren Code. Beachten Sie die addslashes, das ist wahrscheinlich von einem Legacy-Bug. Es sieht so aus, als hätte jemand später versucht, einen Salting-Mechanismus hinzuzufügen und wollte immer noch das alte Passwort verwenden, aber es sieht ein wenig ungeschickt aus. Idealerweise haben Sie nur einen gültigen Passwortmechanismus und können Ihre schwächere Sicherheit verbessern.

Es gibt 20 verschiedene Salze, was eine faire Idee ist, nehme ich an .. aber der Code scheint nicht zu wissen, welcher verwendet wurde .. so versucht es alle? Das ist seltsam und könnte möglicherweise unsicher sein.

Um ein bisschen Text Hash tun gerade:

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

Wie kann ich wissen, welches Salzwort verwendet wird? – LTnewbie

+0

Das ist der Punkt, den er nicht kennt, er versucht es nur alle. Sobald Sie ein Match gefunden haben, wissen Sie natürlich, welches verwendet wurde, aber das erfordert ein gültiges Passwort. – Halcyon

+0

Sehr nützlich, danke. – Norse