Quelqu'un peut m'expliquer comment BCrypt vérifie une table de hachage?
Je suis en utilisant C# et BCrypt.Net pour hacher mes mots de passe.
Par exemple:
string salt = BCrypt.Net.BCrypt.GenerateSalt(6);
var hashedPassword = BCrypt.Net.BCrypt.HashPassword("password", salt);
//This evaluates to True. How? I'm not telling it the salt anywhere, nor
//is it a member of a BCrypt instance because there IS NO BCRYPT INSTANCE.
Console.WriteLine(BCrypt.Net.BCrypt.Verify("password", hashedPassword));
Console.WriteLine(hashedPassword);
Comment est BCrypt vérifier le mot de passe avec la valeur de hachage si ce n'est pas de sauver le sel n'importe où. La seule idée que j'ai, c'est que c'est en quelque sorte ajoutant le sel à la fin de la table de hachage.
Est-ce correct?
Vous devez vous connecter pour publier un commentaire.
Clairement qu'il n'est pas de faire une telle chose. Le sel doit être enregistré quelque part.
Voyons le mot de passe de systèmes de cryptage sur Wikipédia. De http://en.wikipedia.org/wiki/Crypt_(Unix) :
Sinon, la réponse à votre question précédente sur ce sujet, notamment un lien vers le le code source. Plutôt que de demander à l'internet pour lire le code source pour vous, vous pouvez toujours choisir de le lire vous-même. Ce serait probablement obtenir une réponse plus rapide. La section pertinente du code source est:
Clairement la chaîne renvoyée est la version de l'information, suivi par le nombre de tours utilisée, suivie par le sel sont encodées en base64, suivi par la valeur de hachage sont encodées en base64.
Un BCrypt de hachage chaîne ressemble:
Où
2a
: Identifiant de l'algorithme (BCrypt, encodés en utf-8 mot de passe, null)10
: Facteur de coût (210
= 1,024 tours)Ro0CUfOqk6cXEKf3dyaM7O
: OpenBSD-encodées en Base64 sel (22 caractères, 16 octets)hSCvnwM9s4wIX9JeLapehKK5YdLxKcm
: OpenBSD-encodées en Base64 de hachage (31 caractères, 24 octets)BCrypt ne créer un 24-octet binaire de hachage, à l'aide de 16 octets de sel. Vous êtes libre pour stocker les binaires de hachage et le sel toutefois vous le souhaitez, rien ne dit que vous ont de base-64 encoder en une chaîne de caractères.
Mais BCrypt a été créé par les gars qui travaillaient sur OpenBSD. OpenBSD déjà définit un format de leur fichier de mot de passe:
$
[HashAlgorithmIdentifier]
$[AlgorithmSpecificData]
Cela signifie que le "bcrypt spécification" est inexorablement liée à la OpenBSD mot de passe de format de fichier. Et chaque fois que quelqu'un crée un "bcrypt de hachage" ils toujours les convertir en ISO-8859-1 chaîne de format:
$
2a
$[Cost]
$[Base64Salt][Base64Hash]
Quelques points importants:
2a
est l'identificateur alogithmle base64 algorithme utilisé par le OpenBSD fichier de mot de passe n'est pas le même encodage Base64 que tout le monde utilise; ils ont leur propre:
De sorte que toute les implémentations de bcrypt ne peut pas utiliser tout intégré, ou de la norme, en base64 bibliothèque
Armés de cette connaissance, vous pouvez maintenant vérifier un mot de passe
correctbatteryhorsestapler
contre les sauvés de hachage: