Conversion d’un tableau d’octets de hachage md5 en chaîne

Comment convertir le résultat haché, qui est un tableau d’octets, en chaîne?

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

Je dois convertir byteHashedPassword en chaîne.

  public static ssortingng ToHex(this byte[] bytes, bool upperCase) { SsortingngBuilder result = new SsortingngBuilder(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 méthode d'extension:

 ssortingng hexSsortingng = byteArray.ToHex(false); 

J’ai toujours trouvé cela le plus pratique:

 ssortingng hashPassword = BitConverter.ToSsortingng(byteHashedPassword).Replace("-",""); 

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

Mise à jour: Si vous préférez l’hex “minuscule”, faites simplement un .ToLower () et un boom.

Notez que si vous faites cela comme une boucle serrée et de nombreuses opérations, cela peut être coûteux car il y a au moins deux conversions de chaînes implicites et redimensionnements en cours.

Vous pouvez utiliser Convert.ToBase64Ssortingng et Convert.FromBase64Ssortingng pour convertir facilement des tableaux d’octets en chaînes.

Si vous êtes dans le camp “Préférence Hex”, vous pouvez le faire. C’est essentiellement une version minimale de la réponse de Philippe Leybaert.

 ssortingng.Concat(hash.Select(x => x.ToSsortingng("X2"))) 

B1DB2CC0BAEE67EA47CFAEDBF2D747DF

Bien que ce soit un hachage, il a peut-être des valeurs qui ne peuvent pas être affichées dans une chaîne normale, donc le meilleur pari est de le convertir en chaîne encodée en Base64.

 ssortingng s = Convert.ToBase64Ssortingng(bytes); 

et utilise

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

récupérer les octets.

Eh bien, vous pouvez utiliser le constructeur de chaînes qui prend des octets et un encodage, mais vous aurez probablement du mal à gérer cette chaîne car elle pourrait contenir beaucoup de caractères amusants (octets nuls, nouvelles lignes, caractères de contrôle, etc.)

La meilleure façon de procéder serait de l’encoder avec la base 64 pour obtenir une belle chaîne facile à utiliser:

 ssortingng s = Convert.ToBase64Ssortingng(bytes); 

Et pour passer de cette chaîne à un tableau d’octets:

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

Pour toute personne intéressée, un package Nuget que j’ai créé, appelé CryptoSsortingngify, vous permet de convertir une chaîne en chaîne hachée en utilisant une syntaxe propre, sans avoir à jouer avec des tableaux d’octets:

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

C’est une méthode d’extension sur HashAlgorithm et KeyedHashAlgorithm donc KeyedHashAlgorithm marche aussi sur SHA1, HMACSHA1, SHA256 etc.

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