Spring Security -- パスワード暗号化

プロジェクトについては、引き続き書き込みを行っていきますが、現時点では、プロジェクトにログインするためのデータベース ユーザー名とパスワードが実装されており、独自のログイン ページが使用されています。

パスワード暗号化には、PasswordEncoder インターフェイスを使用します。

public interface PasswordEncoder {
    String encode(CharSequence rawPassword);

    boolean matches(CharSequence rawPassword, String encodedPassword);

    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}

このインターフェースには 3 つのメソッドがあります

最初のエンコード方法: 暗号化方法。返される文字列は暗号化された文字列です。

2 番目の match メソッド: パスワード比較のメソッド。rawPassword はプレーンテキストのパスワード、encodedPassword は暗号化されたパスワードです。このパラメータを渡すと、自動的に比較され、ブール値が戻されます。

3 番目の upgradeEncoding メソッド: 暗号化方式をアップグレードする必要があるかどうか

まず最初に、このインターフェースの実装クラスを見てみましょう (alt+h)

 このうち、MessageDigestPasswordEncoderはmd5です

BCryptPasswordEncoder もよく使用されます。

BCryptPasswordEncoder メソッドは、SHA-256+ランダム ソルト+キーを使用してパスワードを暗号化します。

class SecurityDemoApplicationTests {

    /**
     * security中密码自带盐
     */
    @Test
    void contextLoads() {
        BCryptPasswordEncoder B = new BCryptPasswordEncoder();
        for (int i = 0; i < 10; i++){
            System.out.println(B.encode("123"));
        }
    }

}

このメソッドを使用して 123 を暗号化して取得します。

 パスワードの強度は 4 から 31 の間で設定でき、数字が大きいほどパスワードの強度が高く、頻繁にパスワードを試行するのを防ぐため、比較にかかる時間が長くなります。

Spring Security でデフォルトで使用される暗号化方式は次のとおりです。

 PasswordEncoderFactories をグローバルに検索する

このクラスは何のためにありますか? クリックして自分で開くことができ、その中で DelegatingPasswordEncoder が初期化されます。

オブジェクト、ここではすべての暗号化方式を書き出します。パスワードの暗号化方式と一致します。デフォルトは「bcrypt」です。

 パスワードのアップグレードを記録する方法は次のとおりです

まず、UserService に UserDetailsPasswordService メソッドを実装します。

そんな方法もあるんですね

 ユーザーがログインすると、このメソッドはユーザーのパスワードをアップグレードする必要があるかどうかを自動的に判断します。

判断は以下に基づいて行われます。

1. ユーザーのパスワード暗号化方式が現在のデフォルト方式であるかどうか。

2. 同じ暗号化スキームを異なる強度にアップグレードすることもできます

 

 ログインに成功すると、パスワードが元のパスワードから変更されます

 に変更されました

 これがデフォルトの暗号化方式です。

 デフォルトの暗号化方式を変更することもできます

 以上がパスワードの暗号化と更新です。

おすすめ

転載: blog.csdn.net/a2285786446/article/details/131166992