私は上記のソフトウェアスタックを使用しており、データベースに保存する前にパスワードを暗号化する必要があります。私はまたパスワードを解読する必要があります。なぜなら、誰かがパスワードを変更するとき、彼は古いパスワードと新しいonwを2度与える必要があり、古いパスワードをチェックする必要があるからです。 私は多くを検索しましたが、これを行う正しい方法が何であるかまだまだわかりません。 私はこのリンクを見つけましたEncryptingこれを行うための他のヒントはありますか? MongoDBがパスワードを保護するための何かを提供しているかどうかもわかりません。Spring Security、Spring Boot、MongoDBを使用したパスワードのエンコーディングとデコード
答えて
まずパスワードハッシュについてSteven Carlson´s answerをお読みください。
良いことは、Spring Securityがこれを行うことです。 Spring Security 3.2では、新しいorg.springframework.security.crypto.password.PasswordEncoder
インターフェイスといくつかの実装、BCryptPasswordEncoder
、StandardPasswordEncoder
(およびNoOpPasswordEncoder
)が導入されました。
重要:
public String encode(CharSequence rawPassword)
:昔は
public boolean matches(CharSequence rawPassword, String encodedPassword)
org.springframework.security.
authentication.encoding
.PasswordEncoder
を非推奨と(したがって実装)インターフェイスが必要な2つのメソッドがありorg.springframework.security.
crypto.password
.PasswordEncoder
を混同しないでください
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
をお勧めします。 BCryptPasswordEncoder
(StandardPasswordEncoder
とは対照的に)は、パスワードごとに異なる塩を使用します(ただし、StandardPasswordEncoder
のようにグローバルではありません)。生のパスワード(public String encode(CharSequence rawPassword)
)をエンコードすると、返されるエンコードされたパスワードはエンコードされたパスワードだけでなく、使用されているハッシュアルゴリズム、使用されている塩、エンコードされたパスワードに関するメタ情報も含まれます。
パスワードを「暗号化」しないでください。私はこれが直観に反して聞こえることを知っています。しかし、システムがパスワードを解読する必要がある理由がない。これを行うには、データベースをハッカーに公開する必要があります。コード/サーバーに復号化パスワードを格納すると、ハッカーはその情報を盗むことができるからです。
正しい処理はhash
です。ハッシュは一方向(元のテキストに戻すことはできません)プロセスです。現在の標準は、SHA256を使用してパスワードをハッシュすることです。基本的なフローチャートは次のとおりです。
- ユーザーが入力したパスワードを受け取ります。パスワードの例 "mypass"は
ea71c25a7a602246b4c39824b855678894a96f43bb9b71319c39700a1e045222
になります - このハッシュをデータベースに保存します(
ea71c25a7a602246b4c39824b855678894a96f43bb9b71319c39700a1e045222
)。
ユーザーがログインすると、彼はちょうど提出したパスワードを取得し、ハッシュします。同じパスワードを入力すると、データベースの同じ値にハッシュアウトされます。
ユーザーがパスワードを変更する場合は、「古いパスワードを入力」をハッシュして古いパスワードがまだ一致していることを確認します。「新しいパスワードを入力」をハッシュして保存します。
私の例で言及しなかったことの1つはsalt
です。これは、データをrainbow table
の悪用から守るために、システムで使用する必要があるものです。しかしそれは別の議論のためです。
希望はこのことができます:)
- 1. Spring Securityのカスタム認証とパスワードのエンコーディング
- 2. Spring Security OAuth2とActuatorを使用したSpring Boot
- 3. Angular2 with Spring Boot and Spring Security
- 4. Spring SecurityとMongoDBの併用
- 5. Spring Boot、Spring Security - MongoDBの直接URLクエリを防止する
- 6. Spring Boot + Spring Security + Spring OAuth2 + Googleログイン
- 7. Spring-boot Spring-security Freemarkerログイン成功404エラー
- 8. Spring Boot - MongoDB Multiplefield unique
- 9. Spring Securityセッションのプレーン・テキスト・パスワード
- 10. ang 2 spring security with spring security
- 11. ユーザーのパスワードを使用しないSpring Securityのカスタム検証
- 12. Spring Boot:@RequestParamのデコードを防止する
- 13. Spring Securityを使用したJSON REST API
- 14. PingIdentity/PingFederationを使用したSpring Security SAML
- 15. CSRF Spring Securityを使用した保護
- 16. Spring Securityチュートリアルを使用したエラービルドプロジェクト
- 17. ang 2 with spring-boot security rest ap
- 18. selectを使用したSpring-Boot、mySQL
- 19. PostgreSQLを使用したDockerizing Spring Boot App
- 20. Hadoop HBASEを使用したSpring Boot REST
- 21. Spring Boot/h2-consoleはSpring Security 1.5.2で403を投げます
- 22. Spring SecurityでSpring Bootでセッションを管理する方法は?
- 23. MVCを使用したSpring Bootアプリケーション内のSpring Cloudコンフィグレーションサーバ
- 24. JavaMelodyとSpring Security
- 25. Spring Security - BcryptPasswordEncoder
- 26. Springバッチを使用したDB2とMongoDBを使用したSpringバッチ
- 27. Spring、Spring SecurityとSpring Webflowの互換性
- 28. spring-boot-maven-pluginの使用
- 29. Liberty Spring Boot対Spring Boot
- 30. Spring 5 MVC - InternalResourceViewResolverとSpring Security
私はその製品に慣れていないので、春の情報を追加していただきありがとうございます:) –
あなたが言及したようにどのようにメタ情報を取り出すことができますか? – charle819
'BCryptPasswordEncoder'の場合、メタ情報は単にsaltにすぎません:' BCrypt.hashpw(String password、String salt) 'を見てください。 'salt'という名前のパラメータは、暗号化された古いパスワードです。そして、そのメソッドのコードは、パスワードからsaltを読み込みます – Ralph