Im .NET-Framework gibt es ein paar Möglichkeiten, einen MD5-Hash zu berechnen, aber es gibt etwas, das ich nicht verstehe;Was ist der Unterschied zwischen der Verwendung von MD5.Create und MD5CryptoServiceProvider?
Was ist der Unterschied zwischen den folgenden? Was unterscheidet sie voneinander? Sie scheinen identische Ergebnisse zu erzeugen:
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();
}
Würdest du die 'MD5.Create()' Methode als eine Art Factory-Methode betrachten, die eine 'MD5CryptoServiceProvider'-Instanz heute erneut ausführen kann, aber die Flexibilität hat, irgendeine Art von MD5-Implementierung in zukünftigen Versionen zurückzugeben ? Der Rückgabetyp ist 'MD5'. Wenn Sie möchten, dass Ihr Programm die neueste Implementierung verwendet, verwenden Sie die' MD5.Create() 'Methode. – Ben
Wie ist es möglich, dass C# eine Instanz einer abstrakten Klasse zurückgibt? Ich dachte, der ganze Zweck einer abstrakten Klasse sei, dass sie nicht instanziiert werden kann, aber ihre ererbten Kinder können. – silkfire
MD5.Create() gibt einen MD5CryptoServiceProvider nicht die abstrakte MD5-Klasse zurück. –