[JAVA] Hash des mots de passe avec Spring Boot + Spring Security (avec sel, avec étirement)

Avec le codeur de mot de passe de Spring Security, vous pouvez facilement générer des valeurs de hachage salées + étirées. Cet article est un exemple.

environnement

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

Spring Security PasswordEncoder Class Diagram Cela peut être difficile à voir, mais le diagramme de classes de PasswordEncoder dans Spring Security 4.2.2.RELEASE est le suivant.

Spring Security PasswordEncoder Class Diagram1.png

Il existe six classes d'implémentation pour l'interface PasswordEncoder.

Classe d'implémentation PasswordEncoder Aperçu
AbstractPasswordEncoder -
NoOpPasswordEncoder Encodeur sans hachage(pour le test)
Pbkdf2PasswordEncoder Implémentation de PasswordEncoder à l'aide de PBKDF2 avec un nombre d'itérations configurable et une valeur de sel aléatoire aléatoire de 8 octets
StandardPasswordEncoder SHA-256 algorithmes+Encodeur qui hache avec 1024 étirements
BCryptPasswordEncoder Encodeur qui effectue le hachage avec l'algorithme bcrypt
SCryptPasswordEncoder Encodeur qui effectue le hachage avec l'algorithme de scrypt

Dans cet article, je vais essayer le hachage en utilisant BCryptPasswordEncoder.

Hachage avec BCryptPasswordEncoder

Ajoutez une dépendance Spring Security.

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>

Cette fois, CommandLineRunner est implémenté en tant que CLI.

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("Valeur de hachage= " + digest);

		if (passwordEncoder.matches(password, digest)) {
			System.out.println("Il correspondait");
			return;
		}
		System.out.println("Ça ne correspondait pas");
	}
}

Hachez le mot de passe brut (mot de passe) à l'aide de la méthode d'encode de PasswordEncoder. Le résultat du hachage est digest. Utilisez ensuite la méthode matches de PasswordEncoder pour faire correspondre le mot de passe simple (mot de passe) avec la valeur de hachage (digest) obtenue par la méthode d'encode.

Résultat d'exécution.


Valeur de hachage= $2a$10$im98CLRwtWohvPE6wZkYk.Os.RXZVF0iROJXL8vUn7TGrfWoixTdq
Il correspondait

Comment lire la valeur de hachage

La valeur de hachage générée ci-dessus est la suivante.

$2a$10$im98CLRwtWohvPE6wZkYk.Os.RXZVF0iROJXL8vUn7TGrfWoixTdq

La vue est la suivante.

Emplacement du personnage Chaîne Aperçu
1er au 3ème caractères $2a Le numéro de version de bcrypt.
4e à 6e caractères $10 Compte d'étirement(Nombre de répétitions de l'opération de hachage)Sera. Le nombre de fois est de 2 à la nième puissance. Par conséquent, dans cet exemple, 2^10=Ce sera 1024 fois.
7e au 29e caractères $im98CLRwtWohvPE6wZkYk. Valeur de sel.
30e au dernier Os.RXZVF0iROJXL8vUn7TGrfWoixTdq Corps du mot de passe.

Comme mentionné ci-dessus, vous pouvez utiliser PasswordEncoder de Spring Security pour générer des valeurs de hachage salt + étendues, et vous pouvez facilement les faire correspondre avec des mots de passe simples.

Recommended Posts

Hash des mots de passe avec Spring Boot + Spring Security (avec sel, avec étirement)
Obtenez une authentification BASIC avec Spring Boot + Spring Security
Essayez l'authentification LDAP avec Spring Security (Spring Boot) + OpenLDAP
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Télécharger avec Spring Boot
Créez un serveur Spring Cloud Config en toute sécurité avec Spring Boot 2.0
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Gérer le mot de passe haché avec BCryptPasswordEncoder de Spring Security en Perl
Créez un site de démonstration simple avec Spring Security avec Spring Boot 2.1
Générer un code à barres avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Fonction de connexion avec Spring Security
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Essayez d'utiliser Spring Boot Security
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Implémentez une API Rest simple avec Spring Security & JWT avec Spring Boot 2.0
Utiliser l'authentification de base avec Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Implémentez la fonction d'authentification avec Spring Security ③
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Tutoriel Spring Boot à l'aide de l'authentification Spring Security
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Mise en œuvre de la fonction d'authentification avec Spring Security ①
Obtenez des résultats de validation avec Spring Boot
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
Certification / autorisation avec Spring Security & Thymeleaf
La coopération des messages a commencé avec Spring Boot
J'ai essayé d'implémenter un client OAuth avec Spring Boot / Security (connexion LINE)
Partie 1: Essayez d'utiliser la connexion OAuth 2.0 prise en charge par Spring Security 5 avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
Comment lire le corps de la requête plusieurs fois avec Spring Boot + Spring Security
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
Authentification DB avec Spring Security et hachage avec BCrypt