PHP crypt ve tuz - daha açıklama lütfen

2 Cevap php

Ben burada dün ve bazı gerçekten harika cevaplar aldım. Ben oldukça güvenli bir algoritma olacağını düşünüyorum, ne bende ne aldı ve birlikte koydu. Ben tuzunu oluşturan döngü için bir Blowfish kullanarak bir sorun yaşıyorum.

Ben rastgele bir dize almak için döngü için base64 karakterler ve a kullanıyorum. Ben bu oluşturulan dize almak ve tuz gibi crypt fonksiyonunun içine eklemek istiyorum.

Balon balığına ilgili belgeler bu kadar seyrek ve PHP docs gerçekten bile söz etmeyin, çünkü, ben tür burada karanlıkta bıçaklama ediyorum.

Gerçekten garip bir şey bu kodu şimdi olduğu şekilde çalıştırmak, eğer not başarısız olacaktır. Crypt işlevi döngü için or Yukarıdaki either '$ 2a $ 07 $' kaldırmak ve intermittently, şifreli bir dize döndürür. Blowfish Benim anlayış şifreli dize must "$ 'crypt işlevi dolayısıyla birleştirme içinde' $ 2a $ 07 $ 'ile başlar ve sonudur. Gerçekten için yukarıdaki başlayan dize gerekmez döngü ve sadece ondan kurtulmak istiyordu.

Ben de veritabanında or veritabanında crypt fonksiyonunun çıkışını saklayarak ya, rastgele tuz saklanması ile ilgili en iyi uygulama hakkında açıklama istersiniz?

Dün, sadece etrafında tartışma atılan gerçek bir kod yoktu. Ben bugün bir araya koymak bazı kod ve yerinde oldukça güvenli bir şey olmasını istiyorum. Herkes daha iyi bir algoritma ile gelebilir, ben her zaman açığım.

$base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
$salt = '$2a$07$';

for($i=0; $i<60; $i++)
{
    $salt .= $base64[rand(0,63)];
}

return crypt('password', '$2a$07$'.$salt.'$');

2 Cevap

O crypt() sevmediği + tuz karakter, ve diğer özel karakter bir sürü de (*, % vb gibi görünüyor .) Onları filtre eğer her denemede (ve tuz id dize tekrarı gerek) üzerinde çalışması gerekir.

Bu soru hemen hemen eski tarih olduğunu biliyorum, ama google arayarak bulduğu herkesin yararına, bcrypt / EksBlowfish tuzlar, bu soruya cevap olarak nasıl çalıştığını oldukça ayrıntılı bir açıklaması var:

Why does crypt/blowfish generate the same hash with two different salts?

Kısa cevap kafe dediğim gibi, $ ile [a-zA-Z0-9./] oluşan bir base64 alfabesi kullanan, bir sıfır (0 değil) sonlandıran / dolgu karakteri olarak. Eğer çok erken, bu aralığın veya bir $ dışında herhangi bir karakter kullanırsanız, bunu hata veya tuzun tamamını yorumlamak olmaz ya.