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.
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.
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.
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
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