web-dev-qa-db-fra.com

Comment utiliser SHA1 ou MD5 en C #? (Le meilleur en termes de performances et de sécurité pour l'authentification)

En C #, comment utiliser SHA1 automatiquement?
SHA1 est-il supérieur à MD5? (Nous utilisons le hachage pour le nom d'utilisateur et le mot de passe et avons besoin de rapidité pour l'authentification)

25
Sajad Bahmani

Vous ne savez pas exactement ce que vous entendez par là, mais vous devriez vraiment utiliser SHA256 et supérieur. Aussi toujoursutilisez un Salt ( code ) avec vos hash. Une note de côté, une fois le temps écoulé, l'utilisation de hachages durcis est de loin préférable à l'utilisation d'une fonction de hachage simple. C'est-à-dire: hachage sur quelques centaines d'itérations, ou en utilisant des fonctions de hachage déjà éprouvées telles que bcrypt (qui est mentionné ci-dessous je crois). Voici un exemple de code permettant d’utiliser une fonction de hachage SHA256 dans .NET:

byte[] data = new byte[DATA_SIZE];
byte[] result;

using(SHA256 shaM = new SHA256Managed()) {
    result = shaM.ComputeHash(data);
}

Fera le tour pour vous en utilisant SHA256 et se trouve à MSDN .


Note sur la "fissuration" de SHA1: Mise en perspective de la fissuration de SHA-1

35
Kyle Rozendo

SHA1 est plus fort que le MD5, donc si vous avez le choix, mieux vaut l'utiliser. Voici un exemple:

public static string CalculateSHA1(string text, Encoding enc)
{
    byte[] buffer = enc.GetBytes(text);
    SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
    return BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "");
}
29
Darin Dimitrov

Les deux sont trop rapides pour être utilisés, au moins directement. Utilisez Key Strengthening pour "ralentir" la procédure de hachage du mot de passe. La vitesse est malheureusement l'ennemi de la sécurité par mot de passe.

Combien lent est assez lent? Le fait de ralentir le hachage d'un mot de passe de ~ microsecondes à ~ centaines de millisecondes n'aura pas d'incidence négative sur les performances perçues de votre application ... mais rendra la suppression des mots de passe littéralement cent mille fois plus lente.

Voir cet article pour plus de détails: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-Rainbow-tables-what-you-ne-nknow-about -s.html

Le problème est que MD5 est rapide. Il en va de même pour ses concurrents modernes, tels que SHA1 et SHA256. La vitesse est l’un des objectifs de la conception d’un hachage sécurisé moderne, car les hachages constituent l’un des éléments constitutifs de presque tous les cryptosystèmes et sont généralement exécutés à la demande, paquet par message ou par message.

La vitesse est exactement ce que vous ne voulez pas dans une fonction de hachage de mot de passe.

... Snip ... 

Le jeu d'attaque par mot de passe est calculé en fonction du temps requis pour déchiffrer le mot de passe X. Avec les tables Rainbow, ce temps dépend de la taille de votre table et de sa vitesse de recherche. Avec les craqueurs incrémentaux, le temps dépend de la rapidité avec laquelle vous pouvez exécuter la fonction de hachage de mot de passe.

Cela dit, utilisez BCrypt. SCrypt a été développé récemment, mais je doute que des bibliothèques stables (ou prêtes pour la production) existent déjà pour cela. Théoriquement, SCrypt prétend améliorer BCrypt. "Construire soi-même" n'est pas recommandé, mais itérer des milliers de fois dans le MD5/SHA1/SHA256 devrait suffire (p. Ex. Le renforcement des clés).

Et au cas où vous ne le sauriez pas, assurez-vous de lire sur Rainbow Tables. Trucs de sécurité de base.

11
Dragontamer5788

De MSDN

byte[] data = new byte[DATA_SIZE];
byte[] result; 

SHA1 sha = new SHA1CryptoServiceProvider(); 
// This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data);
10
Ahmed Said

J'aimerais utiliser ces choses.

MD5, SHA1/256/384/512 avec un paramètre de codage en option.

Othere HashAlgorithms Merci à Darin Dimitrov.

public static string MD5Of(string text)
{
    return MD5Of(text, Encoding.Default);
}
public static string MD5Of(string text, Encoding enc)
{
    return HashOf<MD5CryptoServiceProvider>(text, enc);
}
public static string SHA1Of(string text)
{
    return SHA1Of(text, Encoding.Default);
}
public static string SHA1Of(string text, Encoding enc)
{
    return HashOf<SHA1CryptoServiceProvider>(text, enc);
}

public static string SHA384Of(string text)
{
    return SHA384Of(text, Encoding.Default);
}
public static string SHA384Of(string text, Encoding enc)
{
    return HashOf<SHA384CryptoServiceProvider>(text, enc);
}

public static string SHA512Of(string text)
{
    return SHA512Of(text, Encoding.Default);
}
public static string SHA512Of(string text, Encoding enc)
{
    return HashOf<SHA512CryptoServiceProvider>(text, enc);
}

public static string SHA256Of(string text)
{
    return SHA256Of(text, Encoding.Default);
}
public static string SHA256Of(string text, Encoding enc)
{
    return HashOf<SHA256CryptoServiceProvider>(text, enc);
}

public static string HashOf<TP>(string text, Encoding enc)
    where TP: HashAlgorithm, new()
{
    var buffer = enc.GetBytes(text);
    var provider = new TP();
    return BitConverter.ToString(provider.ComputeHash(buffer)).Replace("-", "");
}
1
wener

utiliser SHA1 ou SHA2 L'algorithme MD5 est problématique.

http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html .________ % 28v = vs.85% 29.aspx

1
Anuradha Jayasena

MD5 offre de meilleures performances et SHA1, une sécurité supérieure. Vous pouvez avoir une idée de cette comparaison 

 enter image description here

0