Question

Comment puis-je convertir le résultat haché, ce qui est un tableau d'octets, à une chaîne?

byte[] bytePassword = Encoding.UTF8.GetBytes(password);

using (MD5 md5 = MD5.Create())
{
    byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
} 

Je dois convertir byteHashedPassword à une chaîne.

Était-ce utile?

La solution

   public static string ToHex(this byte[] bytes, bool upperCase)
    {
        StringBuilder result = new StringBuilder(bytes.Length*2);

        for (int i = 0; i < bytes.Length; i++)
            result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));

        return result.ToString();
    }

Vous pouvez alors l'appeler comme une méthode d'extension:

string hexString = byteArray.ToHex(false);

Autres conseils

J'ai toujours trouvé que ce soit le plus pratique:

string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");

Pour une raison étrange BitConverter aime mettre des tirets entre les octets, de sorte que le juste les supprime remplacer.

Mise à jour: Si vous préférez hex "minuscule", juste faire une .ToLower () et de la flèche.

Ne notez que si vous faites cela comme une boucle serrée et beaucoup d'ops cela pourrait être coûteuse, car il y a au moins deux cordes implicites webémissions et redimensionne passe.

Vous pouvez utiliser Convert.ToBase64String et Convert.FromBase64String pour convertir facilement des tableaux d'octets en chaînes.

Si vous êtes dans le camp « de préférence Hex » vous pouvez le faire. Ceci est essentiellement une version minimale de la réponse par Philippe Leybaert.

string.Concat(hash.Select(x => x.ToString("X2")))

B1DB2CC0BAEE67EA47CFAEDBF2D747DF

Eh bien comme il est un hachage, il a peut-être des valeurs qui ne peuvent être affichées dans une chaîne normale, donc le meilleur pari est de le convertir en chaîne encodée base64.

string s = Convert.ToBase64String(bytes);

et utiliser

byte[] bytes = Convert.FromBase64(s);

pour obtenir les octets de retour.

Eh bien, vous pouvez utiliser le constructeur de chaîne qui prend octets et un codage, mais vous aurez probablement une difficile à gérer la chaîne de qui, car elle pourrait contenir beaucoup de personnages amusants (octets nuls, les nouvelles lignes, les caractères de contrôle, etc. )

La meilleure façon de le faire serait de le coder avec la base 64 pour obtenir une belle chaîne qui est facile à travailler avec:

string s = Convert.ToBase64String(bytes);

Et pour aller de cette chaîne vers un tableau d'octets:

byte[] bytes = Convert.FromBase64String(s);

Pour toute personne intéressée un paquet Nuget j'ai créé appelé CryptoStringify vous permet de convertir une chaîne à une chaîne de hachage en utilisant une belle syntaxe propre, sans avoir à jouer avec des tableaux d'octets:

using (MD5 md5 = MD5.Create())
{
    string strHashedPassword = md5.Hash(password);
}

Il est une méthode d'extension sur HashAlgorithm et KeyedHashAlgorithm fonctionne ainsi de suite SHA1, HMACSHA1, etc SHA256 aussi.

https://www.nuget.org/packages/cryptostringify

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top