なぜpassword_digestの値からauthenticateでパスワードがあっているか分かるのか?
なぜpassword_digestの値からauthenticateでパスワードがあっているか分かるのか?
→BCryptの一方向ハッシュ関数の仕組みをつかっているから
保存時:
code:ruby
password = "secret123"
password_digest = BCrypt::Password.create("secret123")
# => "$2a$12$ソルト付きハッシュ値..."
認証時:
code:ruby
BCrypt::Password.new(password_digest).is_password?("secret123")
# => true
password_digestにはソルト(ランダムな文字列になっている)
同じパスワードでも毎回違うハッシュ値になる
BCryptは入力されたパスワードを保存されているソルトを使ってハッシュ化し、結果を比較する
ハッシュ値→元のパスワードを逆算することは計算量的に不可能
ちなみにハッシュ化は復号できないので暗号化ではない