Trong khuôn khổ .NET có một vài cách để tính toán một băm MD5 có vẻ như, tuy nhiên có cái gì đó tôi không hiểu;Sự khác nhau giữa việc sử dụng MD5.Create và MD5CryptoServiceProvider là gì?
Sự khác biệt giữa những điều sau đây là gì? Điều gì khiến họ tách biệt với nhau? Chúng dường như tạo ra kết quả giống hệt nhau:
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();
}
Bạn có thể coi phương pháp 'MD5.Create()' là một phương pháp nhà máy có thể tạo lại phiên bản 'MD5CryptoServiceProvider' ngày hôm nay nhưng có khả năng linh hoạt để trả về bất kỳ loại triển khai MD5 nào trong các phiên bản sau ? Đó là kiểu trả về là 'MD5', vì vậy nếu bạn muốn chương trình của bạn sử dụng triển khai mới nhất, thì hãy sử dụng phương thức' MD5.Create() '. – Ben
Làm cách nào để C# trả về một thể hiện của một lớp trừu tượng? Tôi nghĩ toàn bộ mục đích của một lớp trừu tượng là nó không thể được khởi tạo, nhưng những đứa trẻ thừa kế của nó có thể. – silkfire
MD5.Create() trả về MD5CryptoServiceProvider không phải là lớp trừu tượng MD5. –