Pertanyaan Apa perbedaan antara menggunakan MD5.Create dan MD5CryptoServiceProvider?


Dalam kerangka NET. Ada beberapa cara untuk menghitung MD5 hash tampaknya, namun ada sesuatu yang saya tidak mengerti;

Apa perbedaan antara yang berikut ini? Apa yang membedakan mereka dari satu sama lain? Mereka tampaknya menghasilkan hasil yang identik:

    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
2018-04-08 02:11


asal


Jawaban:


System.Security.Cryptography.MD5.Create () sebenarnya membuat MD5CryptoServiceProvider. Itulah mengapa Anda melihat hasil yang sama.

Melihat definisi MD5 adalah kelas dasar dan itu abstrak. Saya menduga mereka menambahkan fungsi membuat publik untuk kemudahan penggunaan.

public sealed class MD5CryptoServiceProvider : MD5

public abstract class MD5 : HashAlgorithm

Lihatlah definisi.

MD5 Merupakan kelas abstrak dari mana semua implementasi dari algoritma hash MD5 mewarisi.

MD5CryptoServiceProvider Menghitung nilai MD5 hash untuk input data menggunakan implementasi yang disediakan oleh penyedia layanan kriptografi (CSP). Kelas ini tidak dapat diwariskan.


29
2018-04-08 02:16



Seperti disebutkan Jason Rowe (tolong beri suara untuk jawabannya, ini hanya kata peringatan), tidak ada perbedaan fungsional. Namun, ada perbedaan jika Anda mempertimbangkannya MD5Managed (atau kelas kriptografi apa pun dengan Managed dalam nama). Managedkelas yang dinamai tidak dapat digunakan ketika algoritma enkripsi yang memenuhi syarat FIPS diaktifkan melalui Kebijakan Grup.


11
2018-04-08 02:34



2 sen saya.

MD5 menambahkan sedikit overhead dan itu lebih lambat dibandingkan dengan MD5CryptoServiceProvider

Saya hanya menjalankan sedikit stress test menghasilkan 300k hash string:

MD5CryptoServiceProvider: 00:00:01.1750834
MD5: 00:00:01.6398959

Hampir 1,5 kali lebih lambat.

PS. Diuji pada laptop inti i7


1
2018-03-13 10:50