<?php
/**
* Seed für viele Anwendungen, die mit Zufallszahlen Arbeiten. Wird bei jeder Anwendung Randomisiert.
*/
/**
* Eine Funktion die eine Echt-Zufällige Zahl ausgibt.
* @param number $min Minimalwert (standard: 0)
* @param number $max Maximalwert (Standard: getrandmax())
* @return number Zufallszahl
*/
function getRandomizedNumber($min=0, $max=-1) {
static $seed=-1;
if($max==-1)
$max=getrandmax();
srand(($seed+$seed-rand())*rand()/$seed);
$seed=rand();
srand($seed);
return(rand($min, $max));
}
function getSaltedPass($pass) {
$salt=getRandomizedNumber(); // Salt erhalten
$times=getRandomizedNumber(); // Wie oft hashen?
$hashpass=sha1($pass); // Erster Schritt
$hashsalt=md5($salt);
for($i=0; $i<=$times;$i++) {
$hashpass=md5($hashpass);
$hashsalt=sha1($hashsalt);
$hashpass=sha1($hashpass);
$hashsalt=md5($hashsalt); //SHA1 und MD5 werden bei beiden Variablen immer gewechselt
}
$saltedHash=sha1(md5($hashpass).md5($hashsalt)); // Und dann noch ein Stinknormaler Salthas mit sha1(md5.md5)
return array('times'=>$times, 'hash'=>$saltedHash, 'salt'=>$salt); // Und als Array zurückgeben
}
function checkSaltedPass($pass, $times, $hash, $salt) {
$hashpass=sha1($pass); // Erster Schritt
$hashsalt=md5($salt);
for($i=0; $i<=$times; $i++) {
$hashpass=md5($hashpass);
$hashsalt=sha1($hashsalt);
$hashpass=sha1($hashpass);
$hashsalt=md5($hashsalt); // Wie in der Generationsfunktion
}
$saltedHash=sha1(md5($hashpass).md5($hashsalt)); // Hash bilden
return $saltedHash==$hash; // Gleich?
}
?>