BCrypt.checkpw () Exception de version de sel non valide
Je suis en train de mettre en œuvre l'authentification à l'aide de BCrypt, dans mon Jeu 2.1. Application Java, mais je suis Invalid salt version exception
quand je suis en train d'authentifier l'utilisateur.
C'est ma trace de la pile
play.api.Application$$anon$1: Execution exception[[IllegalArgumentException: Invalid salt version]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.0]
at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:132) [play_2.10.jar:2.1.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:128) [play_2.10.jar:2.1.0]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0]
java.lang.IllegalArgumentException: Invalid salt version
at org.mindrot.jbcrypt.BCrypt.hashpw(BCrypt.java:664) ~[jbcrypt-0.3m.jar:na]
at org.mindrot.jbcrypt.BCrypt.checkpw(BCrypt.java:763) ~[jbcrypt-0.3m.jar:na]
at model.operations.DistrictOperations.authenticate(DistrictOperations.java:24) ~[na:na]
at controllers.Application.authenticateDistrict(Application.java:26) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$2$$anonfun$apply$2.apply(routes_routing.scala:133) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$2$$anonfun$apply$2.apply(routes_routing.scala:133) ~[na:na]
Je suis en suivant le repository maven: http://mvnrepository.com/artifact/org.mindrot/jbcrypt/0.3m
Mon code est basé sur la documentation, ainsi
district.setPassword(BCrypt.hashpw(json.findPath("password").getTextValue(), BCrypt.gensalt()));
Pour enregistrer le mot de passe (je suis aussi de vérifier le mot de passe pour être null)
BCrypt.checkpw(password, d.getPassword());
Pour vérifier si le mot de passe saisi est correct, où le mot de passe est une Chaîne de caractère et d.getPassword() est hachage de mot de passe.
Je ne sais pas si c'est une information pertinente, mais pour être précis, je suis en utilisant hibernate pour l'ORM et PostgreSQL 8.4 DB.
Je suis un peu coincé dans ici, donc je me demande si quelqu'un pouvait m'aider. Merci infiniment à l'avance.
source d'informationauteur ziky90
Vous devez vous connecter pour publier un commentaire.
Pour ceux qui rencontrent les mêmes exception, vérifiez que vous avez les
BCrypt.checkpw
paramètres dans le bon sens. (Je n'ai pas et donc trouvé cette question avant, j'ai réalisé mon stupide erreur.)Ou que l'OP a répondu lui-même, log/debug la valeur de hachage de mot de passe pour vérifier que vous êtes réellement comparer un hachage de mot de passe! Il devrait être un 60-chaine de caractères dans le format
$2a$10$llw0G6IyibUob8h5XRt9xuRczaGdCm/AiV6SSjf5v78XS824EGbh.
Je suis très désolé pour les embêter avec cette question. J'ai eu juste un bug dans le code qui était de sauver la plaine de la chaîne de la DB au lieu de la BCrypted. C'était appelée à partir d'une autre partie de code.
J'ai rencontré le même problème; assurez-vous que votre mot de passe est stocké dans la base de données dans haché format plutôt que du texte brut. Voici une Bcrypt générateur de traduire votre texte en clair le mot de passe dans un Bcrypt de hachage.
Vous avez à faire assurez-vous que le premier argument est le texte en clair et le second est le mot de passe haché.
C'est la déclaration de la fonction :