ZodiacXP
Erfahrenes Mitglied
Hallo.
Wieder mal eine Diskussion über eine Funktion von mir.
Arbeite langsam auf einen eigenen Hash-Algo hin und hatte zwischendurch die Idee, die aktuellen "sicherer" zu machen. Seht euch bitte den Code an, meine kläglichen Kommentare und übt ein bisschen Kritik dran. Würd mich freuen.
Es ist eine Methode aus einer Klasse - sie ist der Algo für einen sicheren Hash:
Wenn man den "Salt" groß genug wählt und sich kein Zeichen wiederholt ist es sehr schwer Rainbowtables oder ähnliches für dieses Hash-Verfahren zu erstellen.
Man muss aber diesen "Salt" gut schützen und nicht folgendes Wählen:
"0123456789ABCDEF", weil man damit den üblichen md5-wert erhält.
Zudem müsste jemand der den Salt kennt und z.B. wirklich irgendwie an eine Passworttabelle drangekommen ist eine Rainbow-Tabelle komplett neu erstellen.
Bin mal auf ein paar Meinungen gespannt.
Wieder mal eine Diskussion über eine Funktion von mir.
Arbeite langsam auf einen eigenen Hash-Algo hin und hatte zwischendurch die Idee, die aktuellen "sicherer" zu machen. Seht euch bitte den Code an, meine kläglichen Kommentare und übt ein bisschen Kritik dran. Würd mich freuen.
Es ist eine Methode aus einer Klasse - sie ist der Algo für einen sicheren Hash:
PHP:
// $this->sSalt :
$sSalt = "Irgendeine_Zeichenkette";
// $s : Der Text aus dem der Hash werden soll
// $iLevel : als Sicherheitslevel gedacht
public function Hash($s, $iLevel = 3)
{
$iLevel += 1;
// Abwechselnd einen Hash-Algo verwenden
while (--$iLevel)
{
if ($iLevel & 1) $s = md5($s);
else $s = sha1($s);
}
// bei der While-Schleife wird zuletzt IMMER md5 angewandt
// Basis des Zahlensystems bestimmen
$base = strlen($this->sSalt);
// Anzahl der "Ziffern" im neuen Zahlensystem zum darstellen von Dezimal(256)
$cipher = ceil(log(256, $base));
// MD5-Hexwert in 8bit Stücken (2 Hex-Ziffern) durchlaufen von hinten nach vorn
for ($i = 30; $i != -2; $i -= 2)
{
// Aktuelle Hex-Zahl als Dezimale
$k = hexdec(substr($s, $i, 2));
// Temporärer String für aktuelle Zahl
$tmp = "";
// Umwandlung in eigenes Zahlensystem nach üblichen Schema
while ($k != 0)
{
$rest = $k % $base; // restdivision
$tmp = substr($this->sSalt, $rest, 1) . $tmp; // rest vorne dran
$k = floor($k/$base); // mit ganzzahligem ergebnis weitermachen
}
// Umwandlung zuende - fehlende Stellen auffüllen
$r = str_repeat($this->sSalt[0], $cipher - strlen($tmp)) . $tmp . $r;
}
return $r;
}
Wenn man den "Salt" groß genug wählt und sich kein Zeichen wiederholt ist es sehr schwer Rainbowtables oder ähnliches für dieses Hash-Verfahren zu erstellen.
Man muss aber diesen "Salt" gut schützen und nicht folgendes Wählen:
"0123456789ABCDEF", weil man damit den üblichen md5-wert erhält.
Zudem müsste jemand der den Salt kennt und z.B. wirklich irgendwie an eine Passworttabelle drangekommen ist eine Rainbow-Tabelle komplett neu erstellen.
Bin mal auf ein paar Meinungen gespannt.
Zuletzt bearbeitet: