Cytat(nospor @ 30.09.2011, 11:56:34 )

Nie przeczytałeś....
Poszukaj w tamtym temacie postów ZYXa - on to bardzo ładne wyjaśnił, podał nawet przykłady. Może to cię przekona.
Skoro pierwsze hashowanie masz md5, a ono jest podatne na kolizje, to i cała reszta jest podatna na kolizje w twoim algorytmie.
Skoro dla md5 by mieć ciąg1 można podać ciągx i ciągy, to i automatycznie sha512(md5()) też przyjmie na pewno taką samą wartość zarówno dla ciągx i ciągy
Przeczytałem te posty.
Zgadzam się z Tobą, ale popatrzmy się na to w taki sposób...
Gdyby haker dostał się do bazy danych, nie mając dostępu do mojego kodu może co najwyżej myśleć, że jest to 128 bitowy klucz i raczej nie ma pojęcia o tym, że wcześniej korzystano z md5.
A dodając, że sól byłaby zakodowana tak:
sha512(salt+md5(old_pw))
to pomimo tego, że haker nawet wiedziałby, że wcześniej korzystano z md5 nie mógłby tego złamać ze wzg. na sól?
Ok gdyby otrzymał dostęp do mojego kodu, wtedy bezpieczeństwo maleje, wtedy sha512(old_pw) > sha512(salt+md5(old_pw))
Mimo tego raczej hakerzy dostają się głównie do baz danych nie do kodu?
Jeśli by być upartym to można by to zrobić powoli jeszcze tak, aby przynajmniej sprawić, aby korzystający userzy z bazy danych mogli zostać uaktualnieni:
Dodać nową kolumnę is_pw_changed, a następnie:
$query = "
SELECT id, haslo, is_pw_changed FROM klienci3 WHERE login = '$login'
";
$pw = "jakieshaslo4";
$salt = "!@$!%@!TGASDHB^dasdg%!^&asd!&&!@#";
$sha512pw = hash("sha512",$salt.$pw);
{
if ($result['haslo'] == $sha512pw)
{
//log in
}
else if (!$result['is_pw_changed '])
{
if ($md5pw == $result['haslo'])
{
$query = "
UPDATE klienci3 SET haslo = '$sha512pw', is_pw_changed = 1 WHERE id = ".$result['id']."
";
//log in
}
}
else
{
//error etc.
}
}