Каково различие между использованием MD5. Создать и MD5CryptoServiceProvider?

В платформе.NET существует несколько способов вычислить хеш MD5, которым это кажется, однако существует что-то, что я не понимаю;

Каково различие между следующим? Что устанавливает их друг кроме друга? Они, кажется, приводят к идентичным результатам:

    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();
    }
38
задан Ben Lakey 8 April 2010 в 02:11
поделиться

2 ответа

System.Security.Cryptography.MD5.Create () фактически создает MD5CryptoServiceProvider. Вот почему вы видите такие же результаты.

Если посмотреть на определение, MD5 - это базовый класс, и он абстрактный. Я предполагаю, что они добавили публичную функцию создания для простоты использования.

public sealed class MD5CryptoServiceProvider : MD5

public abstract class MD5 : HashAlgorithm

Взгляните на определения.

MD5 Представляет абстрактный класс, от которого наследуются все реализации хеш-алгоритма MD5.

MD5CryptoServiceProvider Вычисляет значение хеш-функции MD5 для входных данных, используя реализацию, предоставленную поставщиком криптографических услуг (CSP). Этот класс не может быть унаследован.

31
ответ дан 27 November 2019 в 03:51
поделиться

Как сказал Джейсон Роу (пожалуйста, проголосуйте за его ответ, это всего лишь предупреждение), функциональной разницы нет. Однако есть разница, если вы рассматриваете MD5Managed (или любой класс криптографии с Managed в имени). Управляемые классы с именами не могут использоваться, если через групповую политику включены алгоритмы шифрования, совместимые с FIPS.

10
ответ дан 27 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: