banner
RustyNail

RustyNail

coder. 【blog】https://rustynail.me 【nostr】wss://ts.relays.world/ wss://relays.world/nostr

Spring Securityのログインパスワードの検証

spring security ログインの設定時には、暗号化ができます。

通常、データベースには平文のパスワードではなく、パスワードのハッシュ値が保存されます。また、ソルトが追加されたパスワードのハッシュ値です。

そして、spring security は関連する暗号化の方法を提供しています。

BCryptPasswordEncoder#

現在、spring は BCryptPasswordEncoder を使用してデータの暗号化と検証を推奨しています。

BCryptPasswordEncoder には、2 つの有効なメソッドがあります:encode と matches

encode メソッド#

BCryptPasswordEncoder の encode メソッドは、毎回新しいソルト値を生成します。

	@Test
    public void testEncoder() {
        BCryptPasswordEncoder cryptPasswordEncoder = new BCryptPasswordEncoder();
        logger.info(cryptPasswordEncoder.encode("dqn"));
        logger.info(cryptPasswordEncoder.encode("dqn"));
        logger.info(cryptPasswordEncoder.encode("dqn"));
        logger.info(cryptPasswordEncoder.encode("dqn"));
        logger.info(cryptPasswordEncoder.encode("dqn"));
    }

ハッシュ値の中の $ はソルトの区切り文字であることがわかります
Encode 結果

保存時には、ソルトが追加されたハッシュ値を保存することができます。

matches メソッド#

matches メソッドは、保存されたハッシュ値が特定のパスワードに属しているかどうかを比較します。

まず、保存されたハッシュ値からソルトを抽出し、パスワードに適用してハッシュ値を計算し、比較します。

encode を使用して試してみましょう:

logger.info("is true?  {}",cryptPasswordEncoder.matches("dqn","$2a$1$95TYhnCLucrLeRDz9PVifuKm99u5mcMqRXe4bzirKOQZAjOhJ0Wr6"));

matches

Security の設定で#

Security の設定ファイルに BCryptPasswordEncoder を追加するのは非常に簡単です:

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(username -> {
         //   return something;
        }).passwordEncoder(new BCryptPasswordEncoder());
    }

直接 new します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。