Quelle est la différence entre L'utilisation de MD5.Créer et MD5CryptoServiceProvider?

dans le cadre de .NET il y a quelques façons de calculer un hachage MD5, il semble, mais il y a quelque chose que je ne comprends pas;

Quelle est la distinction entre ce qui suit? Ce qui les distingue de l'autre? Ils semblent produire des résultats identiques:

    public static string GetMD5Hash(string str)
    {
        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        byte[] bytes = ASCIIEncoding.Default.GetBytes(str);
        byte[] encoded = md5.ComputeHash(bytes);

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < encoded.Length; i++)
            sb.Append(encoded[i].ToString("x2"));

        return sb.ToString();
    }

    public static string GetMD5Hash2(string str)
    {
        System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
        byte[] bytes = Encoding.Default.GetBytes(str);
        byte[] encoded = md5.ComputeHash(bytes);

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < encoded.Length; i++)
            sb.Append(encoded[i].ToString("x2"));

        return sb.ToString();
    }
32
demandé sur Ben Lakey 2010-04-08 06:11:23

3 réponses

Système.Sécurité.Cryptographie.MD5.Create () crée en fait un MD5CryptoServiceProvider. C'est pourquoi vous voyez les mêmes résultats.

en regardant la définition MD5 est la classe de base et c'est abstrait. Je suppose qu'ils ont ajouté la fonction Créer publique pour la facilité d'utilisation.

public sealed class MD5CryptoServiceProvider : MD5

public abstract class MD5 : HashAlgorithm

jetez un coup d'oeil aux définitions.

MD5 représente la classe abstraite dont héritent toutes les implémentations de L'algorithme de hachage MD5.

MD5CryptoServiceProvider calcule la valeur de hachage MD5 pour les données d'entrée en utilisant l'implémentation fournie par le fournisseur de services cryptographiques (CSP). Cette classe ne peut pas être héritée.

30
répondu Jason Rowe 2010-04-08 02:38:48

comme L'a mentionné Jason Rowe (veuillez voter pour sa réponse, ce n'est qu'un avertissement), il n'y a pas de différence fonctionnelle. Cependant, il y a une différence si vous envisagez de MD5Managed (ou toute classe de cryptographie avec Managed dans le nom). Managed - Les classes nommées ne peuvent pas être utilisées lorsque les algorithmes de chiffrement conformes à la norme FIPS sont activés via une politique de groupe.

11
répondu Matthew Ferreira 2010-04-08 02:34:13