0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

has_secure_password その2

Last updated at Posted at 2023-03-09

一体何を書いているのか?

class << self
      attr_accessor :min_cost # :nodoc:
    end
    self.min_cost = false
.
.
.

cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
self.password_digest = BCrypt::Password.create(unencrypted_password, cost: cost)

出典

has_secure_password.rb
https://gist.github.com/thirotan/013f0336025b1644facc#:~:text=Raw-,has_secure_password.rb,-module%20ActiveModel

条件演算子(三項演算子)

式 ? 真だった場合の処理 : 偽だった場合の処理

出典

self.min_cost = falseが偽を返している

BCrypt::Engine.costが作動する

.cost ⇒ Object
Returns the cost factor that will be used if one is not specified when creating a password hash.

パスワードハッシュを作成する際に、指定がない場合に使用されるコストファクターを返します
出典 deepl

コストファクターとは

Bcrypt
Bcryptは暗号の1つであるBlowfishを基盤としたハッシュ関数です。Argon2ではパラメータを3つ指定できましたが、Bcryptではコストと呼ばれる強度を調整するパラメータがあり、コストが12の場合、反復回数は2の12乗になります。

ストレッチング回数(コストパラメータ)
次に「$10$」の「10」はストレッチング回数を示します。この数字は2のn乗のn部分を示しているので、今回は2の10乗で1024回ストレッチングされています。

ハッシュ化されている文字列はいくつかの区分に分けられます。
まず 最初の $ $ で 囲われている部分はバージョンです。
次に $ $で囲われているのは、コストの部分です。
これは、2を基数とした指数となり、この数の2の累乗がEksblowfishでのセットアップ中での繰り返し回数になります。(ストレッチング)
この回数が多ければ、ブルートフォース攻撃になどに対する対抗が強くなりますが、その分計算量が増えて計算に時間がかかるようになります。

感想

Mysql2::Error: Unknown column 'users.password' in 'where clause'
でエラーが起きた。
テーブルにpasswordではなくpassword_digestを入れていたからだ。
このエラーの解決法がわからなかった。
代替法でpassword_digestに直接加えたらハッシュ化できるようになった。

解決法はわからなかったが、どういうふうにパスワードがハッシュ化されているかのかを少し学習できてよかった。
解決法がわからなければコードを見て自分なりに理解できる範囲で妥協ぐらいのことはできると思うので
これから頑張りたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?