En .NET Framework hay un par de formas de calcular un hash MD5, pero hay algo que no entiendo;¿Cuál es la diferencia entre usar MD5.Create y MD5CryptoServiceProvider?
¿Cuál es la distinción entre los siguientes? ¿Qué los distingue unos de otros? Ellos parecen producir resultados idénticos:
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();
}
Considere el método 'MD5.Create()' como una especie de método de fábrica que puede generar una instancia 'MD5CryptoServiceProvider' hoy pero tiene la flexibilidad para devolver cualquier tipo de implementación MD5 en versiones futuras ? Su tipo de devolución es 'MD5', por lo que si desea que su programa use la última implementación, entonces use el método' MD5.Create() '. – Ben
¿Cómo es posible que C# devuelva una instancia de una clase abstracta? Pensé que el propósito completo de una clase abstracta era que no se puede instanciar, pero sus hijos heredados sí. – silkfire
MD5.Create() devuelve un MD5CryptoServiceProvider no la clase abstracta MD5. –