やったこと
Java(Spring) でJBcryptを使用してパスワードのハッシュ化とその認証を行いました。
準備
MVN REPOSITORYからjarファイルを取得
パスワードのハッシュ化
@PostMapping("/sample")
public String sample(@Validated SampleForm sampleForm,
BindingResult bindingResult, Model model) {
// 入力値のpasswordをハッシュ値に変換
String hashedCode = BCrypt.hashpw(sampleForm.getPassword(), BCrypt.gensalt());
// 以下ハッシュ化されたパスワードをDBに格納する処理
...
}
ソルトはハッシュ関数に入れる前のパスワードの前後にくっつける文字列です。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典より引用
パスワードの認証
@Override
public boolean isPasswordCorrect(String inputPassword) {
final String SAMPLE_SQL = "SQL文をここに記載"
// DBからパスワードを取得
Map<String, Object> PasswordFromDB = jdbcTemplate.queryForMap(SAMPLE_SQL);
String passwordFromDB = (String)PasswordFromDB.get("password");
// 入力値である平文のinputPasswordとDBにあるハッシュ化されたpasswordFromDBを比較
if(BCrypt.checkpw(inputPassword, passwordFromDB)) {
// 処理
}
}
まとめ
簡単にハッシュ化できる!
ハッシュ化する時は、
BCrypt.hashpw(ハッシュ化したい値, BCrypt.gensalt());
ハッシュ化した値を認証する時は、
BCrypt.checkpw(比較したい平文の値, DBから取得したハッシュ化された値);
以上です。最後まで読んでくださり、ありがとうございました。