Use BCrypt para senhas

Usar o BCrypt para hashing de senha tem várias vantagens sobre as classes Digest integradas. Em primeiro lugar, tem uma interface decente:

gem "bcrypt-ruby"
require "bcrypt"
hashed_password
= BCrypt::Password.create "my password"

hashed_password agora é uma instância de BCrypt :: Password . Você pode verificar a senha agora com == :

hashed_password == "my password" # => true

O segundo ponto interessante é a segurança embutida. As senhas são salgadas automaticamente. Além disso, o BCrypt tem um custo de parâmetro que escala exponencialmente o tempo de computação.

hashed_password1 = BCrypt::Password.create( "my password", cost: 1 )
hashed_password10
= BCrypt::Password.create( "my password", cost: 10 )

O cálculo da senha com hash10 é 2 ^ 9 vezes mais caro do que o cálculo da senha com hash1 . Dessa forma, você pode ajustar o algoritmo de hashing aos recursos disponíveis e sempre usar o hashing mais caro para crack que você puder pagar.

Por último, mas não menos importante, armazenar e restaurar BCrypt :: Password s é muito simples:

storable_string = hashed_password.to_s
restored_hash
= BCrypt::Password.new storable_string

BOM!