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!