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);