記事ディレクトリ
序文
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 はエンコード プロセスでランダム ソルトを使用するため、セキュリティも高くなります。