has_secure_password
utiliza bcrypt-ruby. bcrypt-ruby
maneja automáticamente el almacenamiento y la generación de sales para usted. Un hash típico de bcrypt-ruby
tiene este aspecto: $2a$10$4wXszTTd7ass8j5ZLpK/7.ywXXgDh7XPNmzfIWeZC1dMGpFghd92e
. Este hash se divide internamente usando la siguiente función:
def split_hash(h)
_, v, c, mash = h.split('$')
return v, c.to_i, h[0, 29].to_str, mash[-31, 31].to_str
end
Para el ejemplo de hash esta función se obtiene:
- versión: 2a
- costo: 10
- sal: $ 2a $ 10 $ 4wXszTTd7ass8j5ZLpK/7.
- de hash: ywXXgDh7XPNmzfIWeZC1dMGpFghd92e
El ==
-función de BCrypt::Password
extrae la sal y la aplica a la cadena pasada:
BCrypt::Password.create('bla') == 'bla' # => true
que creían que el autor estaba preguntando por una columna separada para la sal. No hay forma de que controlemos esta sal, por lo que para el usuario actúa como un extensor de hash, ya que comprometer solo una columna hace que se rompa nuestra contraseña solo por cuestión de tiempo. – jdoe
La pregunta era '¿has_secure_password utiliza alguna forma de salazón?', Y lo hace. Creo que la mayoría de las veces una base de datos completa está en peligro, por lo que no importa si la sal se guarda en una columna adicional. Sin embargo, tiene razón en que es más seguro en el caso de que solo una sola columna de la base de datos se vea comprometida. – fabi
Hola Fabi, gracias por la respuesta, por favor, vota la pregunta si crees que es interesante/aplicable para un público más amplio. –