2016-04-05 6 views
1

Es scheint, dass org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder nicht erzeugt Passwort Salz zurückgibt:Abrufen Passwort Salz mit BCryptPasswordEncoder im Frühjahr

public String encode(CharSequence rawPassword) { 
    String salt; 
    if(this.strength > 0) { 
     if(this.random != null) { 
      salt = BCrypt.gensalt(this.strength, this.random); 
     } else { 
      salt = BCrypt.gensalt(this.strength); 
     } 
    } else { 
     salt = BCrypt.gensalt(); 
    } 

    return BCrypt.hashpw(rawPassword.toString(), salt); 
} 

Frage: für zu welchem ​​Zweck diese entworfen? Wie kann es verwendet werden, da es keine Salz zurückgibt, die für die Kennwortüberprüfung gespeichert werden sollten?

+0

Bitte Siehe Antwort auf diese Sie Ihre Antwort Möglicherweise erhalten https://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in- Salze –

+1

Sind Sie sicher, dass die von "hashpw" zurückgegebenen Informationen das Salz selbst nicht enthalten? – khelwood

+0

@Khelwood Ich bin mir nicht sicher, also könnte dies die Antwort sein. Aber 'Spring-Security' konnte das Passwort im Login-Prozess nicht überprüfen, ohne ihm den tatsächlichen Salzgehalt zu geben – Andremoniy

Antwort

2

Anscheinend ist das Salz Teil der verschlüsselten Zeichenfolge, die durch $ getrennt ist.

Weitere Informationen finden Sie hier: How can bcrypt have built-in salts?

+0

Ja, ist es. Aber 'DaoAuthenticationProvider' konnte es nicht extrahieren, da seine' SaltSource' null ist. Es wäre genial, wenn Sie Ihre Antwort erweitern und zusätzliche Informationen zur Verfügung stellen, wie sie konfiguriert werden, um dieses "$" getrennte Salz automatisch zu extrahieren. – Andremoniy

+0

Sie müssen das Salz nicht extrahieren, das Sie benötigen, um sicherzustellen, dass der 'BCryptPasswordEncoder' für die Validierung eingerichtet ist. Sie sollten die 'SaltSource' nicht verwenden. –

+0

@M.Deinum Könntest du bitte diesen Punkt klären, weil dieser 'auth.userDetailsService (userDetailsService) .passwordEncoder (passwordEncoder()) 'nicht funktioniert – Andremoniy