Spring Pbkdf2PasswordEncoderのサンプル

SpringのPbkdf2PasswordEncoderで文字列をハッシュ化するサンプルです。
パスワードの保存等で使用します。
(確認環境:Spring 5.3.7、JDK 11、STS 4)

目次

サンプル Pbkdf2PasswordEncoderでハッシュ化する
  Pbkdf2PasswordEncoderでハッシュ化する(PasswordTest.java)
  開始ファイル(StartApp.java)
  設定ファイル(applicationContext.xml)
  pom.xml

Pbkdf2PasswordEncoderでハッシュ化する

PasswordTest.javaで文字列をハッシュ化し、ハッシュ化した値と元の値が同じか比較します。

https://spring.pleiades.io/spring-security/site/docs/current/api/org/springframework/security/crypto/password/Pbkdf2PasswordEncoder.html

githubにコードがあります。
https://github.com/ut23405/spring5/tree/master/spring-Pbkdf2PasswordEncoder

Pbkdf2PasswordEncoderでハッシュ化する(PasswordTest.java)

public boolean matches(CharSequence rawPassword, String encodedPassword)

比較は、Pbkdf2PasswordEncoderクラスのmatchesメソッドで行います。

package com.example.test1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
import org.springframework.stereotype.Component;

@Component
public class PasswordTest {
	@Autowired
	Pbkdf2PasswordEncoder passwordEncoder;

	public void chkPassword() {
		String psd = passwordEncoder.encode("あいうえ");
		System.out.println(psd);
		// b3ec9dffa2803757308295fa7cdede56a907d6d5edf9a9519da754e8ed0fbd171bd7d327e3eee0f5

		if (passwordEncoder.matches("あいうえ", psd)) {
			System.out.println("OK"); // OK
		}
	}
}

10行目は@Autowiredでインスタンスを生成しています。
13行目は、Pbkdf2PasswordEncoderで文字列をハッシュ化しています。
生成される文字の長さは80文字です。(イメージ:生成された文字列をテーブルに保存)
17行目は、元の文字列とハッシュ化した文字列を比較しています。結果はtrueになります。
(イメージ:ユーザが入力したパスワード値とテーブルの値を比較し同じならログイン)

開始ファイル(StartApp.java)

package com.example.test1;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class StartApp {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		PasswordTest test = context.getBean(PasswordTest.class);
		test.chkPassword();
		context.close();
	}
}

PasswordTestクラスを実行します。

設定ファイル(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.password.Pbkdf2PasswordEncoder" />
	<context:component-scan base-package="com.example.test1" />
</beans>

10行目は、Pbkdf2PasswordEncoderを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を指定しています。

関連の記事

SpringBoot フォームで入力チェック(バリデーション)

△上に戻る