Es gibt Zeiten, in denen Sie eine Zeichenfolge wie das Kennwort verwenden möchten, das mit BCryptPasswordEncoder von Spring Security von Perl zur Authentifizierung gehasht wurde.
Nein, ich weiß es nicht.
Es gab so ein Ereignis.
$2a$10$Cc6/UiniMuKkyVsVM.FUt.rmgDm0UOQxuhuGSSuL/LzZUGrNeGvxq
Ein solcher Wert wurde gespeichert. Es scheint die Arbeit von Spring Security zu sein. Was für ein Wert ist dieser unbekannte Hash-Wert?
Als ich von der Situation abhängig war, googelte ich auf verschiedene Weise, aber es kamen keine Informationen heraus.
JscxAX:5[4Q]NYoK
Ein bestimmter Login-Benutzer "Das ist mein Passwort, ist es richtig?" Ich habe mich in Perl gefragt.
Nun, die seltsame Zeichenfolge, die Spring Security gerade gehasht und gespeichert hat, und die Überprüfung dieses Passworts? Ich weiß nichts über Perl?
Es ist überraschend einfach
use strict;
use warnings;
use utf8;
use feature qw(say);
use Crypt::Eksblowfish::Bcrypt qw(bcrypt);
my $raw_password = 'JscxAX:5[4Q]NYoK';
my $hashed_password = '$2a$10$Cc6/UiniMuKkyVsVM.FUt.rmgDm0UOQxuhuGSSuL/LzZUGrNeGvxq';
my $salt = substr($hashed_password, 0, 29); # "$2a$10$" +22 Zeichen
my $check = bcrypt($raw_password, $salt);
if ($check eq $hashed_password) {
say "ATTERUYO!";
}
else {
say "ATTENAIYO!";
}
ATTERUYO!
War gut. Dort war.
… Eh, kommt das jedes Mal mit ATTERUYO heraus?
my $raw_password = 'JscxAX:4[5Q]NYoK';
Nur eine Zeile änderte sich zu einem etwas falschen Gefühl.
ATTENAIYO!
War gut. Ich kann den Fehler richtig beurteilen.
Frühlingssicherheit "Ändern Sie in Perl das Passwort und erstellen Sie eine Funktion zum Speichern." Du sagst.
Ja, Sie verwenden diesen Wert zur Validierung, oder? Muss ich es zu einem Format machen, mit dem Sie umgehen können ...?
… Natürlich musst du das tun.
Sagen Sie nicht, dass Sie es nicht in Java tun können, Sie können es nicht in Perl tun oder Sie können es nicht gegen den Wind eines Kamels stellen.
use strict;
use warnings;
use utf8;
use feature qw(say);
use Crypt::Eksblowfish::Bcrypt qw(bcrypt en_base64);
use Crypt::Random qw(makerandom_octet);
sub gen_salt {
return en_base64(makerandom_octet(Length => 16));
}
my $raw_password = 'Z86J9_Kr_sDcw#o4'; #Neues Kennwort
my $salt = '$2a$10$' . gen_salt();
my $hashed_password = bcrypt($raw_password, $salt);
say $hashed_password;
$2a$10$/IwrxT05tg1ZlmUrV.7eAOsowJsbkVHs6ku54FC0VHBew23HOm61W
Ich könnte so etwas tun
Z86J9_Kr_sDcw#o4
Durch den obigen Perl-Code
$2a$10$/IwrxT05tg1ZlmUrV.7eAOsowJsbkVHs6ku54FC0VHBew23HOm61W
Es wurde in eine solche Zeichenfolge konvertiert und in der Datenbank gespeichert.
Ist es wirklich möglich, diesen Hash mit Java (Spring Security) korrekt zu überprüfen ...?
In der Tat habe ich es mit einem ziemlich geeigneten Code überprüft, der das starke Gefühl hat, von einer Person geschrieben zu werden, die normalerweise kein Java schreibt.
package com.example.demo;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
public class DemoApplication {
public static void main(String[] args) {
String rawPassword = "Z86Jq_Kr_sDcw#o4";
String hashedPassword = "$2a$10$/IwrxT05tg1ZlmUrV.7eAOsowJsbkVHs6ku54FC0VHBew23HOm61W";
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
if (passwordEncoder.matches(rawPassword, hashedPassword)) {
System.out.println("ATTERUYO!");
}
else {
System.out.println("ATTENAIYO!");
}
}
}
ATTERUYO!
Ich bin froh, dass ich es richtig gemacht habe.
… Eh, kommt das jedes Mal mit ATTERUYO heraus?
String rawPassword = "Z86Jq_Kr_sDcw#o4";
Nur eine Zeile änderte sich zu einem etwas falschen Gefühl.
ATTENAIYO!
War gut. Ich kann den Fehler richtig beurteilen.
Es gibt SCryptPasswordEncoder und Pbkdf2PasswordEncoder, aber zu diesem Zeitpunkt ist dies kein Problem in meiner Umgebung, daher sollte es eines Tages jemand zusammenstellen.
Recommended Posts