BCrypt アルゴリズムについて話す


序文

BCrypt アルゴリズムはハッシュ アルゴリズムに基づくアルゴリズムであるため、このアルゴリズムは元に戻すことができません


1. BCrypt アルゴリズムとは?

BCrypt アルゴリズムはハッシュ アルゴリズムに基づくアルゴリズムであるため、このアルゴリズムは元に戻すことができません

BCryptアルゴリズムでエンコードした結果、長さは60文字固定

BCrypt はエンコード処理中にランダムなソルトを使用し、使用されたソルトもエンコード結果の一部として保存されるため、同じ元のテキストを繰り返しエンコードに使用すると、毎回異なる結果が得られます。

回路図は以下の通りです:

 

2.ステップを使用する

1.平文を暗号化する

BCryptPasswordEncode クラス オブジェクトを作成し、object.encode(plaintext) メソッドを使用して暗号文を生成します。

コードは次のとおりです (例)。

public void testEncode(){
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

        for (int i = 0; i < 5; i++) {
            String rawPassword = "123456";
            String encodedPassword = passwordEncoder.encode(rawPassword);
            //在编码过程中,BCrypt使用了随机的盐
            //所以每次得到的结果都不一致
            log.debug("原文={},密文={}",rawPassword,encodedPassword);
            //原文=123456,密文=$2a$10$xd.seKl0H3k/Ks72BoKJVO95yCvhhSy4u9nXzEOBOeJ7lxxke69Aq
            //原文=123456,密文=$2a$10$2rfZBv4gjy4MeJ2h93VC3eARlVlBJRKje8UMMu9Ul4JV6FG.OPTxy
            //原文=123456,密文=$2a$10$dGSHSIhvwnflGBIrdNsTwusPpvNbvjxzwz10mg3RTVrfR1sxhKmda
            //原文=123456,密文=$2a$10$NUFTdtD1/rcA7d4qzpQ3PecDEIvzTp7HeuFl8gv7zcg1O/kw0vNqq
            //原文=123456,密文=$2a$10$3CjSrCyMv/imDsJiJvwOVOxuNcaUOppExXg5kZLA1DJ0nZ/7aw48G
        }
    }

2.検証

object.matches(plaintext, ciphertext) を使用して、一致するかどうかを検証します。salt は、暗号文の生成時にエンコード結果の一部として暗号文に格納されるため、検証する場合:

a. 暗号文のソルト値が取り出されて平文に追加され、対応する暗号文が生成されます

b. 生成された暗号文とパラメーター内の暗号文を比較して、それらが一貫しているかどうかを確認します

c. 一貫性がある場合、メソッドの戻り値は true、そうでない場合、メソッドの戻り値は false

コードは次のとおりです (例)。

@Test
    public void testMatches(){
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String rawPassword = "123456";
        //从上面运行得到的密文随机取一个验证
        String encodedPassword = "$2a$10$3CjSrCyMv/imDsJiJvwOVOxuNcaUOppExXg5kZLA1DJ0nZ/7aw48G";
        //使用matches()方法,需传参原文,密文,返回值为布尔型,true则验证成功
        boolean matches = passwordEncoder.matches(rawPassword,encodedPassword);
        log.debug("原文={},密文={},匹配结果={}",rawPassword,encodedPassword,matches);
    }

要約する

メッセージ ダイジェスト アルゴリズムと比較して、BCrypt アルゴリズムは操作が簡単であり、BCrypt はエンコード プロセスでランダム ソルトを使用するため、セキュリティも高くなります。

おすすめ

転載: blog.csdn.net/weixin_72125569/article/details/126710694