Ruby on Rails

bcrypt【Rubyのパスワード暗号化Gem】

更新日:

こんにちは、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についてでした

ほぼメモですみません

それでは、また

-Ruby on Rails
-,

Copyright© 初心者のためのプログラミング独学ブログ , 2020 All Rights Reserved Powered by STINGER.