107 votes

Hachage avec l'algorithme SHA1 en C#

Je veux hacher donné byte[] en utilisant SHA1 Algorithme avec l'utilisation de SHA1Managed .
Le site byte[] Le hash viendra du test unitaire.
Le hachage attendu est 0d71ee4472658cd5874c5578410a9d8611fc9aef (sensible à la casse).

Comment puis-je y parvenir ?

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

    }
}

216voto

Mitch Points 5201

Pour ceux qui souhaitent un formatage de texte "standard" du dièse, vous pouvez utiliser quelque chose comme ce qui suit :

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

Cela produira un hachage comme 0C2E99D0949684278C30B9369B82638E1CEAD415 .

Ou pour un code version golfique :

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

Pour les versions .Net 5 et supérieures, la fonction intégrée Convert.ToHexString donne une bonne solution sans compromis :

static string Hash(string input)
{
    using var sha1 = SHA1.Create();
    return Convert.ToHexString(sha1.ComputeHash(Encoding.UTF8.GetBytes(input)));
}

41voto

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

EDIT :

Vous pouvez également spécifier le codage lors de la conversion du tableau d'octets en chaîne de caractères comme suit :

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

o

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

19voto

sky-dev Points 1990

C'est ce que j'ai choisi. Pour ceux d'entre vous qui veulent optimiser, consultez https://stackoverflow.com/a/624379/991863 .

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

9voto

Grant Thomas Points 28280

Vous pouvez "calculer la valeur pour le tableau d'octets spécifié" en utilisant ComputeHash :

var hash = sha1.ComputeHash(temp);

Si vous souhaitez analyser le résultat sous la forme d'une chaîne de caractères, vous devrez formater les octets à l'aide de la commande {0:X2} spécificateur de format.

9voto

alireza amini Points 5

Le moyen le plus rapide est le suivant :

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

Pour la sortie de petits caractères, utilisez x2 au lieu de de X2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X