SHA512: liefert 128-stelligen Passwort-Hashwert (SHA-2)

edit | delete

Autor: Ralf v.d.Mark

eingetragen: Mittwoch, 29. Juni 2011 um 12:18 Uhr (26/2011 Kalenderwoche)

geändert: Mittwoch, 21. Dezember 2011 um 15:06 Uhr (51/2011 Kalenderwoche)

Keywords: SHA2 SHA512 hash sha Passwort Hashwert

Kategorien: PHP,

Text:

Der PHP-Befehl hash('sha512', 'ein Passwort')
liefert einen 128-stelligen Passwort-Hashwert zurück.


http://de.wikipedia.org/wiki/SecureHashAlgorithm


http://de2.php.net/manual/de/function.hash.php

Quellcode:  

/**
 * Liefert 128-stelligen Passwort-Hashwert (auch Fingerprint o. Streuwert)
 * der es Hackern erschweren soll, das Passwort des Users rueckwaerz aus
 * dem Hash auszuspaehen (Kollisionsangriff).
 * 
 * Zur Info: http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
 * SHA-512 gehoert zur SHA-2-Familie
 *   * Output size: 512/384 bits,
 *   * Internal state size: 512 bits,
 *   * Block size: 1024 bits,
 *   * Max message size: 2128 bits − 1 bit,
 *   * Zeichengroesse: 64 bits,
 *   * Runden: 80,
 *   * Operationen: add, and, or, xor, shift, rotate,
 *   * Bisher keine Hash-Kollision bekannt!
 *
 * @author    Ralf von der Mark
 * @copyright Ralf von der Mark
 * @version   1.0 vom 28.06.2011
 * @tutorial  http://de2.php.net/manual/de/function.hash.php 
 * 
 * @param  string  $meinPasswort
 * @param  string  $badesalz
 * @param  integer $anzahlLoops
 * @return string  [Hash (128 Zeichen)]
 */
function passwortHashRuettelBox($meinPasswort,
                                $badesalz,
                                $anzahlLoops = 5000)
{
    $badesalz = md5($badesalz);/* Salz in 32-stelligen Wert hashen */
    $badesalzTeil1 = substr($badesalz, 0, 16);/* 1.Teil des Salz-Hash */
    $badesalzTeil2 = substr($badesalz, 16);/* 2.Teil des Salz-Hash */
    $jederZweite = 2;
    for ($loopZaehler = 1; $loopZaehler < $anzahlLoops; $loopZaehler++)  {
        $meinPasswort = hash('sha512', $meinPasswort);
        if ($jederZweite == 2) {
            $jederZweite = 1;
            $meinPasswort = hash('sha512', $meinPasswort
                                          .$badesalzTeil2
                                          .$badesalzTeil1
                                          .$loopZaehler);
        } else {
            $jederZweite = 2;
            $meinPasswort = hash('sha512', $meinPasswort
                                          .$loopZaehler
                                          .$badesalz);
        }//ENDE: else ==> if()
        echo chr(10).$loopZaehler.'.) '.$meinPasswort.chr(10).'<br>';
    }//ENDE: for ()
    return $meinPasswort;
}//ENDE: function passwortHashRuettelBox(...)


/**
 * Kleine Hilfe zum erstellen des Usernamens in Base64
 * und des gehashten Passwortes
 * Hinweis: Nach der Funktion wird exit(); ausgefuehrt!
 *
 * @param string $username (gewuenschte Benutzername)
 * @param string $passwort (gewuenschtes Passwort)
 * @param string $badesalz (das Salz fuers Passwort)
 *
 * @example echo getZugangsDaten('myUsername', 'myPasswort'); */
function getZugangsDaten($username, $passwort, $badesalz)
{
    return '<h1>Username: '
                .base64_encode($username)
          .'</h1>
            <h1>Passwort: '
                .passwortHashRuettelBox($passwort, $badesalz)
          .'</h1>';
    exit();
}//ENDE: function getZugangsDaten(...)