Question

J'ai cherché partout sur Google et je ne peux pas trouver un exemple de code de Scrypt d'utilisation (pour le hachage d'un mot de passe) à l'aide de la Cryptsharp de la bibliothèque.

Pouvez-vous veuillez donner un exemple pour le hachage du mot de passe?

Était-ce utile?

La solution

C'est seulement un seul appel donc, je vais vous guider à travers les paramètres:

  1. key:c'est votre mot de passe, utiliser l'encodage UTF-8 (sans marque d'ordre d'octet) pour encoder votre mot de passe dans un tableau d'octets;
  2. salt:une chaîne de sécurité d'octets aléatoires stockées avec le résultat de la scrypt fonction, 16 octets doit être ample;
  3. cost:la suggestion est de 262144, mais vous pouvez augmenter cette valeur si votre serveur peut supporter la charge supplémentaire;
  4. blockSize:voir coût, la suggestion est de 8;
  5. parallel:Je voudrais garder cette à 1, sauf si vous voulez expérimenter avec le multi-threading;
  6. maxThreads:en général null fera très bien l'affaire;
  7. derivedKeyLength:eh bien, ça dépend, pour les mots de passe de 128 devrait être assez bien, il est peu probable que votre mot de passe a plus de 128 bits de sécurité.

Vous devez conserver au moins le sel et le résultat.Vous souhaiterez peut-être utiliser codage en base 64 si vous souhaitez stocker des chaînes de caractères.

Je vous recommande de stocker une pièce supplémentaire de données:une version de votre mot de passe en fonction de dérivation de clé schéma (PBKDF).Par exemple, mettre à 1 pour l'utilisation de scrypt, à l'aide de la clé de codage, le sel de la taille, le coût, la taille de bloc etc.Dans ce cas, vous pouvez mettre à jour votre système (par exemple, vous avez besoin de l'utilisateur de fournir son mot de passe pour ce faire, vous devrez le faire en ligne, de sorte que vous finirez par avoir plusieurs schémas opérationnels en même temps).

Notez que vous pouvez la chaîne PBKDF appels de fonction, vous pouvez utiliser l'original PBKDF de sortie et de l'utiliser comme entrée pour la prochaine PBKDF.Dans ce cas, l'utilisateur n'a pas à fournir le mot de passe (ce soupçon a été prise à partir de CodesInChaos sur une autre question).

Autres conseils

@maartebboteswes fournit une excellente réponse avec des conseils supplémentaires très sages.Voici un échantillon de code avec ses recommandations.Je suggérerais également de lire ' Votre mot de passe est trop court 'qui montre l'importance d'utiliser la cryptographie moderne comme (au moment de la rédaction) Bcrypt ou SCRYPT .

public string Hash(string secret, string salt)
{
    var keyBytes = Encoding.UTF8.GetBytes(secret);
    var saltBytes = Encoding.UTF8.GetBytes(salt);
    var cost = 262144;
    var blockSize = 8;
    var parallel = 1;
    var maxThreads = (int?)null;
    var derivedKeyLength = 128;

    var bytes = SCrypt.ComputeDerivedKey(keyBytes, saltBytes, cost, blockSize, parallel, maxThreads, derivedKeyLength);
    return Convert.ToBase64String(bytes);
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top