Estoy tratando de escribir una función para calcular el valor hash de una cadena y sal, sin embargo, sigue devolviendo lo que parece ser un valor codificado, que es completamente ilegible.

Aquí está mi método:

public string HashAndSaltString(string stringtohash, string salt)
{
    byte[] data = System.Text.Encoding.ASCII.GetBytes(stringtohash + salt);
    System.Security.Cryptography.SHA512 hashed = new System.Security.Cryptography.SHA512Managed();
    byte[] result = hashed.ComputeHash(data);
    string final = System.Text.Encoding.ASCII.GetString(result);
    return final;
}

Y esta una muestra de lo que devuelve:

?mJv?v??a ? ??v??g???s?1t?F?v?6(H????????f.???z??H??(?????
%?O??7J??p4??s=`??&p?u?6?????FX!&????????'???!|?"b??c??
?\w[??2ZB????}??_???P?&^??`r???pw?'???0a???#?!Df??????S+

Supongo que esto tiene algo que ver con las partes GetBytes y GetString del método, ¿codificándolo en ASCII?

Alguna ayuda sería muy apreciada.

1
Frayt 2 feb. 2015 a las 00:49

2 respuestas

La mejor respuesta

Las funciones hash generalmente procesan su entrada en un fragmento de bytes de longitud fija, que no está hecho para ser legible por humanos.

La forma habitual de convertir esta matriz de bytes en una secuencia de caracteres es aplicarle base64.

En C # puedes hacer:

string final = Convert.ToBase64String(result);

Para obtener una cadena, y:

byte[]backToByteArray = Convert.FromBase64String(final);

Para recuperar una matriz de bytes.

9
Auth0x 25 ago. 2018 a las 17:08

SHA solo genera hash-sum para algunos datos, pero no los cifra. Este programa muestra la suma hash SHA512 en modo hexadecimal.

class Program
{
    static void Main(string[] args)
    {
        string text = "This is random text!";

        var sha = new SHA512Managed();
        byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(text));

        Console.WriteLine("Input text: " + text);

        Console.WriteLine("SHA512: ");
        for (int i = 0; i < hash.Length; i += 4)
        {
            Console.Write(" {0}{1}{2}{3} ",
                Convert.ToString(hash[i], 16),
                Convert.ToString(hash[i + 1], 16),
                Convert.ToString(hash[i + 2], 16),
                Convert.ToString(hash[i + 3], 16));
        }

        Console.ReadLine();
    }
}

Más en wiki

0
f14shm4n 1 feb. 2015 a las 22:17