Comment puis-je générer un SEL en Java pour les Salés-de Hachage?
J'ai été en regardant autour et la réponse la plus exacte est : Comment générer aléatoirement une chaîne alphanumérique?
Je veux suivre ce flux de travail en fonction de ce CrackStation tutoriel:
Pour Stocker un Mot de passe
Générer un long aléatoire de sel à l'aide d'un CSPRNG.
Ajouter le sel pour le mot de passe et de hachage avec une norme fonction de hachage cryptographique comme SHA256.
Enregistrer à la fois le sel et le hachage de l'utilisateur enregistrement de base de données.
Pour Valider un Mot de passe
Récupérer de l'utilisateur, le sel et le hachage de la base de données.
Ajouter le sel pour le mot de passe et de hachage en utilisant la même fonction de hachage.
Comparer le hash du mot de passe donné avec le hash à partir de la base de données. Si elles correspondent, le mot de passe est correct. Sinon, le mot de passe est incorrect.
Je ne sais pas comment générer un SEL. J'ai compris comment générer un hachage à l'aide de la MessageDigest. J'ai essayé d'utiliser SecureRandom mais nextByte méthode produit un brouillage des code.
Edit: je ne sais pas quelle réponse choisir, ils sont trop compliqué pour moi, j'ai décidé d'utiliser jBCrypt; jBCript est facile à utiliser, le complexe des trucs derrière les coulisses. donc, je vais laisser la communauté de voter pour la meilleure réponse.
- Si vous voulez un moyen facile de crypter un mot de passe en java, regarde jBcrypt 🙂
- Merci!!!! C'est ce que je vais probablement utiliser maintenant.
- Si elle a l'air vraiment simple, mais à l'aide d'un certifié Fournisseur de Sécurité serait la bonne chose à faire.
- Vous êtes les bienvenus 🙂 j'aime vraiment cette librairie, simple et efficace, de plus blowflish algorithme est parfaite pour le cryptage des mots de passe 😀
- +1 pour jBcrypt. C'est bien connu et respecté. Ne pas mettre en œuvre vos propres trucs, sauf si vous savez vraiment ce que vous faites, c'est juste trop facile de désordre.
- Les gars, Il fait tellement longtemps que je ne sais pas laquelle est la bonne plus. Les gars, vous pouvez voter, mais je ne vais pas choisir la "bonne réponse"
- jBcrypt ressemble à une bonne bibliothèque, mais une légère correction à @NiziL propos de la langue: "hachage de mot de passe" n'est pas "chiffrement". Le chiffrement est l'endroit où vous pouvez utiliser une clé pour l'inverser et récupérer les données (comme les bases de données ou le cryptage de disque dur). jBcrypt est de hachage, pas de chiffrement, veillez à ne pas ajouter à la confusion autour de ces termes.
- Je n'ai jamais été très bon avec les mots... et de sécurité 😛 Merci pour cette erreur !
Vous devez vous connecter pour publier un commentaire.
Inspiré de ce post et ce poste, j'utilise ce code pour générer et vérifier haché salé mots de passe. Il utilise uniquement le JDK fourni classes, aucune dépendance externe.
Le processus est le suivant:
getNextSalt
hash
méthode pour générer un salée et mot de passe haché. La méthode renvoie unbyte[]
que vous pouvez enregistrer dans une base de données avec le selisExpectedPassword
méthode pour vérifier que les détails de matchVous avez raison concernant la façon dont vous souhaitez générer le sel c'est à dire sa n'a rien, mais un nombre aléatoire. Pour ce cas particulier, il permettrait de protéger votre système contre de possibles attaques par Dictionnaire. Maintenant, pour le deuxième problème que vous pourriez faire, c'est plutôt d'utiliser l'encodage UTF-8, vous pouvez utiliser Base64. Ici, un exemple pour la génération d'une table de hachage. Je suis à l'aide d'Apache Commune de Codecs pour faire de l'encodage base64 vous pouvez sélectionner l'un de vos propres
Voici quelques références supplémentaires de la norme de pratique de hachage de mot de passe directement à partir de OWASP
Une autre version à l'aide de l'algorithme SHA-3, je suis en utilisant bouncycastle:
L'interface:
La mise en œuvre:
Le cas de test:
pom.xml (seulement les dépendances):
Voici ma solution, j'aimerais l'opinion de quelqu'un sur ce, c'est simple, pour les débutants
Vous pouvez valider par juste le décodage de la
strSalt
et à l'aide de la mêmehash
méthode: