crypt() documentation göre, tuz alfabesinden 64 basamaklı 22 baz olması gerekiyor "./0-9A-Za-z".
Bu verdikleri kod örneği:
crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$');
İlk kafa karıştırıcı bölümü tuz 25 karakterleri, değil 22 olmasıdır.
Question #1: o tuz 22 karakterden daha longer olması gerekiyordu anlamına mı geliyor?
Sonra işlevini kendimi test ve bir şey fark ettim. Ben 20 karakter tuz kullanırsanız, ben bu olsun
// using 20 char salt: 00000000001111111111
crypt('rasmuslerdorf', '$2a$07$00000000001111111111$');
// $2a$07$00000000001111111111$.6Th1f3O1SYpWaEUfdz7ieidkQOkGKh2
Ben bir 20 karakterlik tuz kullanıldığında Yani, tüm tuz çıkışı olduğunda. Ben daha sonra ayrı bir yerde tuz saklamak zorunda değilsiniz, çünkü uygun olan. (Rastgele tuzları kullanmak istiyorum). Ben oluşturulan karma dışarı geri tuz okumak mümkün olacaktır.
Ben belgelerine diyor, ya da bir uzun olarak 22 karakterlik tuz kullanmak Ancak, tuz sonunda kesilir.
// using 22 char salt: 0000000000111111111122
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// 22nd character of the salt is gone
// using 25 char salt: 0000000000111111111122222
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122222$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// Same hash was generated as before, 21 chars of the salt are in the hash
Question #2: Yani, bir tuzun uygun bir uzunluğu tam olarak nedir? 20? 22? Daha uzun?
Question #3: Ayrıca, o şifreleri kontrol etmek için zaman zaman karma dışarı tuzu okumak için iyi bir fikir mi? Bunun yerine, ayrı bir alanda tuz depolanması ve oradan okuma. (Tuz karma dahil edilecek gibi görünüyor bu yana Hangi gereksiz görünüyor).