generar c# hash byte sha1 hashcode

generar hash c#



Hashing con el algoritmo SHA1 en C# (6)

Quiero SHA1Managed hash a la matriz byte[] con el uso de Algoritmo SHA1 con el uso de SHA1Managed .
El hash de byte[] vendrá de la prueba unitaria.
Hash esperado es 0d71ee4472658cd5874c5578410a9d8611fc9aef ( 0d71ee4472658cd5874c5578410a9d8611fc9aef mayúsculas y minúsculas).

¿Cómo puedo conseguir esto?

public string Hash(byte [] temp) { using (SHA1Managed sha1 = new SHA1Managed()) { } }


Esto es con lo que fui. Para aquellos de ustedes que desean optimizar, visiten https://.com/a/624379/991863 .

public static string Hash(string stringToHash) { using (var sha1 = new SHA1Managed()) { return BitConverter.ToString(sha1.ComputeHash(Encoding.UTF8.GetBytes(stringToHash))); } }


La forma más rápida es esta:

public static string GetHash(string input) { return string.Join("", (new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToString("X2")).ToArray()); }

Para salida de caracteres pequeños use x2 en reemplazo de X2


Para aquellos que desean un formato de texto "estándar" del hash, puede usar algo como lo siguiente:

static string Hash(string input) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(input)); var sb = new StringBuilder(hash.Length * 2); foreach (byte b in hash) { // can be "x2" if you want lowercase sb.Append(b.ToString("X2")); } return sb.ToString(); } }

Esto producirá un hash como 0C2E99D0949684278C30B9369B82638E1CEAD415 .

O para una versión de código golfed:

static string Hash(string input) { var hash = (new SHA1Managed()).ComputeHash(Encoding.UTF8.GetBytes(input)); return string.Join("", hash.Select(b => b.ToString("x2")).ToArray()); }


Puede "calcular el valor para la matriz de bytes especificada" utilizando ComputeHash :

var hash = sha1.ComputeHash(temp);

Si desea analizar el resultado en representación de cadenas, deberá formatear los bytes utilizando el especificador de formato {0:X2} .


Voy a arrojar mi sombrero aquí:

(como parte de una clase estática, ya que este fragmento es dos extensiones)

//hex encoding of the hash, in uppercase. public static string Sha1Hash (this string str) { byte[] data = UTF8Encoding.UTF8.GetBytes (str); data = data.Sha1Hash (); return BitConverter.ToString (data).Replace ("-", ""); } // Do the actual hashing public static byte[] Sha1Hash (this byte[] data) { using (SHA1Managed sha1 = new SHA1Managed ()) { return sha1.ComputeHash (data); }


public string Hash(byte [] temp) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(temp); return Convert.ToBase64String(hash); } }

EDITAR:

También puede especificar la codificación al convertir el conjunto de bytes a cadena de la siguiente manera:

return System.Text.Encoding.UTF8.GetString(hash);

o

return System.Text.Encoding.Unicode.GetString(hash);