こんにちは、Shinyaです
今回はRubyのbcryptを少し勉強したのでメモとして要点を簡単に残しておきます
- bcryptとは
- Railsへのインストール方法
- Rubyで試し使いするとき
- メソッド1:暗号化
- メソッド2:照合
bcryptとは
パスワードを暗号化してセキュリティを向上させるためのGem
Railsへのインストール方法
Gemfileに下記の文を記述しbundle install
実行
gem 'bcrypt', '[バージョン]'
Rubyで試し使いするとき
インラインでGemを指定できます↓( 参考:https://qiita.com/ayasuda/items/d8488f607967e26ef0ab )
require "bundler/inline" #下記のgemfileメソッドを使えるようにする
gemfile true do #gemfileメソッドここから
source "http://rubygems.org" #参照元
gem "bcrypt" #bcryptを取り込む
end #ここまで
require "bcrypt" #ライブラリ読み込み
#この後にbcryptを使うコードを続けて書いていく↓
これでbcryptをインラインで読み込むことができます
システムにインストールしないで、その場だけでGemを使うイメージです
お手軽ですよ
メソッド1:create(暗号化)
Password.create([生のパスワード]) #=> 暗号化されたパスワード
生のパスワードを入れると暗号化された文字列を返します
データベースに生のパスワードを記録しなくて済むためセキュリティが上がります
ユーザー登録でパスワードを受け取ってそれを暗号化してデータベースに登録するとき使う感じです
include BCrypt #bcrypt内のBCryptモジュールを取り込む
hashed_password = Password.create("my password") #暗号化
puts hashed_password
#=> $2a$12$iu7wKZUHLvuel9P6iwUMTub37NNw/ESmViR0yQS.hg76.d4QHeyjS
ちなみに元の生のパスワードが同じでもそれを元に作られる暗号文は毎回異なります
include BCrypt #bcrypt内のBCryptモジュールを取り込む
puts hashed_password1 = Password.create("my password")
#=> $2a$12$/hZvzQB6KStwDLoD/TxmeuPwrgxoSgzuxFxOKmbThTD0Ye/uLTfLS
puts hashed_password2 = Password.create("my password")
#=> $2a$12$7hHZdjsWMBFKO3ZhzWm/J.5nvz1Kbe8PZcSMfXBGQp02ggY27Irxa
puts hashed_password3 = Password.create("my password")
#=> $2a$12$h5jWdTzYPqJcezpZ3uWbju8rpTno9lhj69PHCgJRzb3o4O9rCjPFC
このランダム性はsaltsという機能により実現しています
メソッド2:new(照合)
Password.new([暗号化されたパスワード]) #=>照合可能な暗号化されたパスワード
暗号化されたパスワードをそのまま元のパスワードと照合すると一般的に失敗してしまいますが、このメソッドを通すと照合できます
このメソッドはログイン時などに入力されたパスワードをデータベースに登録された暗号化されたパスワードと照合するとき使います
下記の例では暗号文をそのまま引数にしてますが、通常はユーザーに紐づいたパスワードのインスタンス変数を引数に入れる場合が多いと思います
なぜ照合に使うのがインスタンス生成メソッドのnewなのかは深入りすると大変そうなので置いておきます(すいません)
puts Password.new("$2a$12$iu7wKZUHLvuel9P6iwUMTub37NNw/ESmViR0yQS.hg76.d4QHeyjS") == "my password" #照合
#=> true
puts "$2a$12$iu7wKZUHLvuel9P6iwUMTub37NNw/ESmViR0yQS.hg76.d4QHeyjS" == "my password" #照合
#=> false
以上がbcryptについてでした
ほぼメモですみません
それでは、また