Tüm bir günün (yalan yok!) Tuzlama şifre karma / hakkında okuduktan sonra, ben çalışan bir çözüm gelen muhtaç değilim, sürekli kullanılan ve çeşitli için enough yaklaşık güvenli olabilir paylaşılan bir kod temeli kullanan farklı siteler / uygulamalar.
Yani, burada bir MySQL kullanıcı tablo bir fikir:
users { id, username, password_hash, password_salt }
.. Ve pseudo-ish kodu:
$s_algo = 'sha1';
$i_iterations = 1000;
$s_password = 'mypw123xyuACE&.!3';
$s_salt = hash($s_algo,uniqid(mt_rand(),true));
$s_result = $s_password;
for ($i = 0; $i < $i_iterations; $i++) {
$s_result = hash($s_algo,$s_result . $s_salt);
}
echo 'Password: ' . $s_password . "\n";
echo 'Algorithm: ' . $s_algo . "\n";
echo 'Iterations Completed: ' . $i . "\n";
echo 'Salt : ' . $s_salt . "\n";
echo 'Result: ' . $s_result . "\n";
echo 'Length: (Salt:) ' . strlen($s_salt) . ' (Result:) ' . strlen($s_result) . "\n";
Aslında kimlik anda depolanmış (tuzlu) karma karşı kullanıcı karadan verilen şifreyi doğrulamak PHP kod bit olarak PHP ve MySQL arasındaki etkileşim (SQL), okundu olarak alınır. Bu roket bilimi değil. Bu zaten bütün bu işleri açısından, ancak un tuzlu hash sadece şifre depolama.
Benim okuma ben orada (Tamam, muhtemelen DEĞİL md5) $ s_algo gerçekten ne olması gerektiği konusunda sonsuz tartışmalar olabilir, ve aynı zamanda $ i_iterations şüpheli. Yani sadece onlar gibi belirli bir bağlamda, yani depolama sınırlamaları, sunucu yük kaygıları, göre değişiklik olabilir, bu sorun senaryo dahilinde variables olduğunu düşünelim
Bunlar bir kenara, PHP bir kullanıcı başına-tuzlanmış şifreleri genellikle ses oluşturmak için bu yöntem nedir? Döngüsü 'for' de orada olması gerekiyor mu? Ilk tuz oluşturma kodu Tamam mı? Tuz-uzunluk overkill, depolama-bilge (nihai karma uzunluğa eşit) olduğunu. Insanlar, delik almak için lütfen (ama çok fazla değil!) ..
Other thoughts:
- What about hash_hmac() - is that a critical improvement over multiple hash() iterations?
- PBKDF2?