SpringのBCryptPasswordEncoderで文字列をハッシュ化するサンプルです。
パスワードの保存等で使用します。
(確認環境:Spring 5.3.7、JDK 11)
目次
サンプル | BCryptPasswordEncoderでハッシュ化する |
BCryptPasswordEncoderでハッシュ化する(Test.java) | |
メインファイル(MainController.java) | |
設定ファイル(applicationContext.xml) | |
pom.xml |
BCryptPasswordEncoderでハッシュ化する
Test.javaで文字列をハッシュ化し、ハッシュ化した値と元の値が同じか比較します。
githubにコードがあります。
https://github.com/ut23405/spring5/tree/master/spring-BCryptPasswordEncoder
BCryptPasswordEncoderでハッシュ化する(Test.java)
public boolean matches(CharSequence rawPassword, String encodedPassword) |
比較は、BCryptPasswordEncoderクラスのmatchesメソッドで行います。
package com.example.test1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
@Component
public class Test {
@Autowired
BCryptPasswordEncoder passwordEncoder;
public void chkPassword() {
String psd = passwordEncoder.encode("あいうえ");
System.out.println(psd);
// $2a$10$Up7JTF3FQ/mnvIzyIq8byeliDSXhc6NPxzw7PcZ181ENqtXtPRP9y
if (passwordEncoder.matches("あいうえ", psd)) {
System.out.println("OK"); // OK
}
}
}
10行目は@Autowiredでインスタンスを生成しています。
13行目は、BCryptPasswordEncoderで文字列をハッシュ化しています。
生成される文字の長さは60文字です。(イメージ:生成された文字列をテーブルに保存)
17行目は、元の文字列とハッシュ化した文字列を比較しています。結果はtrueになります。
(イメージ:ユーザが入力したパスワード値とテーブルの値を比較し同じならログイン)
コントローラ(MainController.java)
package com.example.test1;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainController {
public static void main(String[] args) {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
Test cs = context.getBean(Test.class);
cs.chkPassword();
context.close();
}
}
Testクラスを実行します。
設定ファイル(applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="passwordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
<context:component-scan base-package="com.example.test1" />
</beans>
10行目は、BCryptPasswordEncoderをDIコンテナに登録しています。
pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.7</version>
</dependency>
4行目は、spring-security-coreを指定しています。
関連の記事