Всъщност може и то с доста голяма скорост, само трябва в един файл да запише всичките хешове и салтовете и да знае типът на крайният хеш, примерно md5(md5($salt).md5($hash)), а да не говорим, че hashcat има и готови алгоритми като phpbb3 wordpress и т.н. и с някой голям wordlist от inside-a за няколко дни може да намери паролите на доста от акаунтите.
Е да това би го направил или някой психясъл "хахор" или ако достъпът до сайта ще му е наистина ценен.
Извинявам, че се отклонявам от темата, но вчера уж "бг анонимните" хакнаха сайта на "Български фармацефтичен съюз" , макар че по-скоро е някой самозванец тъй като не беше заменил страницата а беше добавил новина.
Та както и да е поиграх си аз 10 минути и се оказа че в таблицата user с над 1000 потребители всичките пароли са записани в абсолютно чист вид.
Да не говорим че на 7/8 от тези хора сигурно използват и същите пароли за email адресите си..
Така че да се запазват пароли в чист вид може да навреди на хората като не само им се откраднат акаунти, а дори и email адреси, което ще е доста неприятно..
Не е нужно да държиш salt-овете в база данни.
По-добре направи функция която да връща salt според потребителското име.
Примерно нещо такова
PHP:
<?php
function generate_salt($username)
{
$salt = '$%'.substr( strrev(md5(base64_encode($username))), 0,8 );
return $salt;
}
echo generate_salt("proba");
?>
Това ще върне $%0d363987
След това при регистрация записваш да речем следното:
PHP:
// тук функцията за генериране, можеш да я сложиш и в отделен файл и да я include
$username = htmlspecialchars($_POST['username']);
$hash = md5($_POST['password']);
$salt = generate_salt($username);
$new_hash = md5(md5($salt).md5($hash));
// mysql_query("INSERT INTO...") or die(mysql_error());
И записваш в базата данни $new_hash.
Като аз тествах с парола test и hash-ът е това:
393e1458baf5c900894111717bab83b9
И за вход си проверяваш така:
PHP:
// тук функцията за генериране, можеш да я сложиш и в отделен файл и да я include
$username = htmlspecialchars($_POST['username']);
$hash = md5($_POST['password']);
$salt = generate_salt($username);
$new_hash = md5(md5($salt).md5($hash));
// mysql_query("SELECT *...") or die(mysql_error());
(То това със сигурност ти е ясно де).
Така за абсолютно всеки потребител получаваш уникален salt без той да е записан някъде така, че само ако видят кодът на функцията биха могли да си създадат salt и да се опитват да разбият паролата..
Но те ако имат достъп да видят кодът на функцията, то тогава не виждам за какво им е паролата след като имат достъп до файловете на сайта и т.н.
Така, че се надявам това да ти е от полза.
Поздрави, Ивайло (не знам дали ме помниш, преди няколко месеца пътувахме в 1 купе във влака (до Бургас), ти беше с тениска на h*st.bg и тогава те питах дали работиш за тях, а накрая се оказа , че сме съфорумници

)