[JAVA] Hash-Passwörter mit Spring Boot + Spring Security (mit Salt, mit Stretching)

Mit dem Password Encoder von Spring Security können Sie auf einfache Weise gesalzene und gestreckte Hashwerte generieren. Dieser Artikel ist ein Beispiel.

Umgebung

JDK:1.8 Spring Boot:1.5.3.RELEASE Spring Security:4.2.2.RELEASE

Spring Security PasswordEncoder Class Diagram Es ist möglicherweise schwer zu erkennen, aber das Klassendiagramm von PasswordEncoder in Spring Security 4.2.2.RELEASE lautet wie folgt.

Spring Security PasswordEncoder Class Diagram1.png

Es gibt sechs Implementierungsklassen für die PasswordEncoder-Schnittstelle.

PasswordEncoder-Implementierungsklasse Überblick
AbstractPasswordEncoder -
NoOpPasswordEncoder Encoder ohne Hashing(zum Test)
Pbkdf2PasswordEncoder Implementierung von PasswordEncoder mit PBKDF2 mit konfigurierbarer Anzahl von Iterationen und zufälligem 8-Byte-Zufallssalzwert
StandardPasswordEncoder SHA-256 Algorithmen+Encoder, der mit 1024 Strecken hascht
BCryptPasswordEncoder Encoder, der Hashing mit dem bcrypt-Algorithmus durchführt
SCryptPasswordEncoder Encoder, der Hashing mit dem Verschlüsselungsalgorithmus ausführt

In diesem Artikel werde ich versuchen, Hashing mit BCryptPasswordEncoder durchzuführen.

Hashing mit BCryptPasswordEncoder

Fügen Sie eine Spring Security-Abhängigkeit hinzu.

pom.xml


<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-core</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-config</artifactId>
</dependency>

Dieses Mal ist CommandLineRunner als CLI implementiert.

SpringBootEncodeApplication.java


package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@SpringBootApplication
public class SpringBootEncodeApplication implements CommandLineRunner {

	@Autowired
	PasswordEncoder passwordEncoder;

	public static void main(String[] args) {
		SpringApplication.run(SpringBootEncodeApplication.class, args);
	}

	@Bean
	PasswordEncoder passwordEncoder() {
		return new BCryptPasswordEncoder();
	}

	@Override
	public void run(String... args) {

		String password = "#fe?3d31";
		String digest = passwordEncoder.encode(password);
		System.out.println("Hashwert= " + digest);

		if (passwordEncoder.matches(password, digest)) {
			System.out.println("Es stimmte überein");
			return;
		}
		System.out.println("Es passte nicht zusammen");
	}
}

Hash das einfache Passwort (Passwort) mit der Codierungsmethode von PasswordEncoder. Das Ergebnis von Hashing ist Digest. Verwenden Sie dann die Übereinstimmungsmethode von PasswordEncoder, um das einfache Kennwort (Kennwort) mit dem von der Codierungsmethode erhaltenen Hashwert (Digest) abzugleichen.

Ausführungsergebnis.


Hashwert= $2a$10$im98CLRwtWohvPE6wZkYk.Os.RXZVF0iROJXL8vUn7TGrfWoixTdq
Es stimmte überein

Lesen des Hashwerts

Der oben generierte Hashwert ist wie folgt.

$2a$10$im98CLRwtWohvPE6wZkYk.Os.RXZVF0iROJXL8vUn7TGrfWoixTdq

Die Ansicht ist wie folgt.

Zeichenposition String Überblick
1. bis 3. Zeichen $2a Die Versionsnummer von bcrypt.
4. bis 6. Zeichen $10 Stretching zählen(Anzahl der Wiederholungen des Hashing-Vorgangs)Wird sein. Die Häufigkeit ist 2 nach der n-ten Potenz. Daher in diesem Beispiel 2^10=Es wird 1024 mal sein.
7. bis 29. Zeichen $im98CLRwtWohvPE6wZkYk. Salzwert.
30. bis zum letzten Os.RXZVF0iROJXL8vUn7TGrfWoixTdq Passwortkörper.

Wie oben erwähnt, können Sie mit dem PasswordEncoder von Spring Security Salt + Stretched-Hash-Werte generieren und diese einfach mit einfachen Passwörtern abgleichen.

Recommended Posts

Hash-Passwörter mit Spring Boot + Spring Security (mit Salt, mit Stretching)
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Mit Spring Boot herunterladen
Erstellen Sie mit Spring Boot 2.0 einen Spring Cloud Config Server mit Sicherheit
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Behandeln Sie das gehashte Passwort mit BCryptPasswordEncoder von Spring Security in Perl
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Generieren Sie mit Spring Boot einen Barcode
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Anmeldefunktion mit Spring Security
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Versuchen Sie es mit Spring Boot Security
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Implementierte Authentifizierungsfunktion mit Spring Security ③
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Implementierte Authentifizierungsfunktion mit Spring Security ①
Erhalten Sie Validierungsergebnisse mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Die Nachrichtenkooperation begann mit Spring Boot
Ich habe versucht, einen OAuth-Client mit Spring Boot / Security (LINE-Anmeldung) zu implementieren.
Teil 1: Versuchen Sie, die von Spring Security 5 unterstützte OAuth 2.0-Anmeldung mit Spring Boot zu verwenden
Verarbeitung beim Starten einer Anwendung mit Spring Boot
So lesen Sie Request Body mit Spring Boot + Spring Security mehrmals
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
DB-Authentifizierung mit Spring Security und Hashing mit BCrypt