has_secure_password
をRailsモデルに追加すると、暗号化に問題があるかどうかは完全にはわかりません。私は間違いなく塩でハッシュしていることを知っていますが、そこに暗号化がありますか? bcryptはフクロウを使うことができますが、bcrypt-ruby
(これの背後にある宝石)に使われていますか?has_secure_password - ハッシュまたは暗号化のみですか?
0
A
答えて
1
TL; has_secure_password
は、self.password=
メソッドを使用するときにBcryptのハッシュ関数を使用するようにします。
のはhas_secure_password
のコードを見てみましょう:
# File activemodel/lib/active_model/secure_password.rb, line 53
def has_secure_password(options = {})
# Load bcrypt gem only when has_secure_password is used.
# This is to avoid ActiveModel (and by extension the entire framework)
# being dependent on a binary library.
begin
require "bcrypt"
rescue LoadError
$stderr.puts "You don't have bcrypt installed in your application. Please add it to your Gemfile and run bundle install"
raise
end
include InstanceMethodsOnActivation
if options.fetch(:validations, true)
include ActiveModel::Validations
# This ensures the model has a password by checking whether the password_digest
# is present, so that this works with both new and existing records. However,
# when there is an error, the message is added to the password attribute instead
# so that the error message will make sense to the end-user.
validate do |record|
record.errors.add(:password, :blank) unless record.password_digest.present?
end
validates_length_of :password, maximum: ActiveModel::SecurePassword::MAX_PASSWORD_LENGTH_ALLOWED
validates_confirmation_of :password, allow_blank: true
end
end
我々はそれがハッシュ/何かを暗号化しないことがわかります。それにもかかわらず、私たちは気づく:
私たちは、次のコードを取得InstanceMethodsOnActivation
のドキュメントに行けば
include InstanceMethodsOnActivation
:
def password=(unencrypted_password)
if unencrypted_password.nil?
self.password_digest = nil
elsif !unencrypted_password.empty?
@password = unencrypted_password
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
self.password_digest = BCrypt::Password.create(unencrypted_password, cost: cost)
end
end
。したがって、has_secure_password
は暗号化されません/ハッシュ何でもしかしInstanceMethodsOnActivation
モジュールを含んでいます。このモジュールはpassword=
メソッドを定義します。この方法の重要な部分がある:
self.password_digest = BCrypt::Password.create(unencrypted_password, cost: cost)
は、今度はBCrypt::Password.create
のコード見に行こう:この方法では
def create(secret, options = {})
cost = options[:cost] || BCrypt::Engine.cost
raise ArgumentError if cost > 31
Password.new(BCrypt::Engine.hash_secret(secret, BCrypt::Engine.generate_salt(cost)))
end
def valid_hash?(h)
h =~ /^\$[0-9a-z]{2}\$[0-9]{2}\$[A-Za-z0-9\.\/]{53}$/
end
end
を、私たちは特に注意してください:
Password.new(BCrypt::Engine.hash_secret(secret, BCrypt::Engine.generate_salt(cost)))
だから、そうです論理的です(あなたはパスワードをとにかく解読したくありません)。
関連する問題
- 1. Md5ハッシュの暗号化と復号化
- 2. 暗号化とハッシュ化のパスワード
- 3. Java - サーバー間でのハッシュ/暗号化
- 4. 日付の暗号化またはハッシュ値
- 5. 暗号化、復号化、ハッシュを呼び出すクラスとは何ですか?
- 6. これはどのようなハッシュ/暗号化ですか? '0E0B020601'
- 7. DotNetNuke - プレーンテキストから暗号化/ハッシュ化されたパスワードへ
- 8. ハッシュ/電子メールの暗号化
- 9. マルチライターで暗号化されたデータのハッシュを計算する
- 10. リンクの塩とハッシュの暗号化/復号化
- 11. Sql - バルク暗号化ハッシュ生成
- 12. ハッシュ/暗号化設定ファイル情報
- 13. サーバーから暗号化し、クライアントで暗号化を解除します(クライアントでは暗号化しません)。
- 14. コアデータデータベースを暗号化または部分的に暗号化しますか?
- 15. 暗号ハッシュ関数
- 16. 暗号化ライブラリを使用してCodeigniterで暗号化コードを生成 "/"ライブラリまたは暗号化ライブラリ
- 17. 暗号でメッセージを暗号化するアプリには暗号化が含まれていますか? iOS App Store
- 18. 符号なし整数を使用したJavaでの非暗号化ハッシュ
- 19. C#暗号化されたデータをJavascriptで暗号化する
- 20. プロキシパスワードは暗号化またはハッシュされていますか?明示的な設定でパスワードが暗号化されることを
- 21. 暗号化されたファイルを別のデバイスで読み込みますか?
- 22. URLに送信される変数のハッシュまたは暗号化
- 23. SHA256暗号化ハッシュの正しいBigQuery構文は何ですか?
- 24. 良い暗号化/暗号化の本
- 25. Railsログファイルの暗号化またはスクラブ
- 26. Swift:ファイルまたはプレーンテキストの暗号化
- 27. 暗号化のインスタンスまたは鍵を使用しない暗号化
- 28. EF CodeFirstでフィールドをハッシュまたは暗号化するにはどうすればよいですか?
- 29. sha256ハッシュをAESでキー暗号化する方法++
- 30. 暗号化は