May 4, 2020 • ☕️ 1 min read
bcryptによるパスワードの暗号化について調べたのでメモ。
ユーザーが入力したパスワードをそのままデータベースに保存するのは危険すぎる。Railsのgemであるbcryptを使用する場合、ハッシュ関数というものを使ってランダムな文字列で暗号化する。
入力値の長さに関係なく、あらかじめ決められた固定長の出力データを得る関数。
このハッシュ関数を使って暗号化された文字列は、
他にもセキュリティ面をより強化するために、ソルト
やストレッチング
という手法も組み込まれているが、一番下の記事で詳しく説明されているので割愛。
実際にRailsで使うのは、非常に簡単。 ログイン機能の実装において有名なdeviseではデフォルトで備わっている。
gem 'bcrypt'
bundle install
rails g model User name:string email:string password_digest:string
rails db:migrate
has_secure_password
を記述。bcryptをbundle installすると使用可能になるメソッドで、password_digest
カラムに暗号化したパスワードを保存してくれる。class User < ApplicationRecord
has_secure_password
end
これで、Userが保存された時に、password
というカラムに入った文字列はハッシュ関数で暗号化され、ユーザーが入力した値ではなくハッシュ値のみ
が保存されるようになる。
ログインやパスワードの更新時には、ユーザーが過去に入力した正確な文字列を送信すれば、返ってくるハッシュ値が同じなので照合が成功して「パスワードは正しい」となり、正常に処理が行われる。
参考にした記事はこちら
Tomoya