Tuz bcrypt ile saklanmalı mıyım?


189

bCrypt'in javadoc'unda bir parola nasıl şifrelenir:

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

Düz metin parolanın daha önce karma olan parolayla eşleşip eşleşmediğini kontrol etmek için checkpw yöntemini kullanın:

if (BCrypt.checkpw(candidate_password, stored_hash))
    System.out.println("It matches");
else
    System.out.println("It does not match");

Bu kod parçacıkları bana rastgele üretilen tuzun atıldığını ima ediyor. Durum böyle mi, yoksa bu sadece yanıltıcı bir kod pasajı mı?

Yanıtlar:


214

Tuz, karmaya dahil edilir (base64 tarzı bir formatta kodlanır).

Örneğin, geleneksel Unix şifrelerinde tuz, şifrenin ilk iki karakteri olarak saklandı. Kalan karakterler karma değerini temsil etti. Denetleyici işlevi bunu bilir ve tuzu geri almak için karmayı ayırır.


59
Tuz, şifreye dahil edilir. Yani tuzu kurtarmak zorunda değilsiniz.
Swapnonil Mukherjee

2
Bunun için teşekkürler. Onların javadoc :) içinde (- ama ben önce aradığı şeyi bilmiyordum ben kaynağında bakıp teyit ettik) söyledi dilek
RodeoClown

1
Teşekkürler - Bunu da anlamaya çalışıyordum! Şimdi bunun iyi bir fikir olup olmadığını merak ediyorum. Tuzun karma içinde ayrı olarak saklanması üzerinde tutmanın bir avantajı / dezavantajı var mı?
Adam

8
@Adam - Tuz rastgele üretildiğinden, veritabanınızdaki iki şeyi ilişkilendirmek için bir yönteme ihtiyacınız olmadığı anlamına gelir.
RodeoClown

Kaynak koduna bir göz attım ve tuz argümanı için JavaDoc'un "belki BCrypt.gensalt kullanılarak oluşturulmuş" olmasına rağmen, genSalt () yöntemini kullanmanız gerektiğini veya istisnalar elde ettiğinizi
keşfettim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.