Je veux hacher le tableau d’ byte[]
à l’aide de l’algorithme SHA1
avec l’utilisation de SHA1Managed
.
Le hash byte[]
proviendra du test unitaire.
Le hachage attendu est 0d71ee4472658cd5874c5578410a9d8611fc9aef
(sensible à la casse).
Comment puis-je atteindre cet objective?
public ssortingng Hash(byte [] temp) { using (SHA1Managed sha1 = new SHA1Managed()) { } }
Pour ceux qui veulent un formatage “standard” du hachage, vous pouvez utiliser quelque chose comme ceci:
static ssortingng Hash(ssortingng input) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(input)); var sb = new SsortingngBuilder(hash.Length * 2); foreach (byte b in hash) { // can be "x2" if you want lowercase sb.Append(b.ToSsortingng("X2")); } return sb.ToSsortingng(); } }
Cela produira un hash comme 0C2E99D0949684278C30B9369B82638E1CEAD415
.
Ou pour une version à code golf:
static ssortingng Hash(ssortingng input) { var hash = (new SHA1Managed()).ComputeHash(Encoding.UTF8.GetBytes(input)); return ssortingng.Join("", hash.Select(b => b.ToSsortingng("x2")).ToArray()); }
public ssortingng Hash(byte [] temp) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(temp); return Convert.ToBase64Ssortingng(hash); } }
MODIFIER:
Vous pouvez également spécifier l’encodage lors de la conversion du tableau d’octets en chaîne de la manière suivante:
return System.Text.Encoding.UTF8.GetSsortingng(hash);
ou
return System.Text.Encoding.Unicode.GetSsortingng(hash);
C’est ce que j’ai fait avec. Pour ceux d’entre vous qui souhaitent optimiser, consultez https://stackoverflow.com/a/624379/991863 .
public static ssortingng Hash(ssortingng ssortingngToHash) { using (var sha1 = new SHA1Managed()) { return BitConverter.ToSsortingng(sha1.ComputeHash(Encoding.UTF8.GetBytes(ssortingngToHash))); } }
Vous pouvez “calculer la valeur du tableau d’octets spécifié” à l’aide de ComputeHash
:
var hash = sha1.ComputeHash(temp);
Si vous souhaitez parsingr le résultat en représentation sous forme de chaîne, vous devrez formater les octets à l’aide du spécificateur de format {0:X2}
.
Le moyen le plus rapide est le suivant:
public static ssortingng GetHash(ssortingng input) { return ssortingng.Join("", (new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToSsortingng("X2")).ToArray()); }
Pour les petits caractères, utilisez x2
en remplacement de X2
Je jette mon chapeau ici:
(dans le cadre d’une classe statique, cet extrait étant constitué de deux extensions)
//hex encoding of the hash, in uppercase. public static ssortingng Sha1Hash (this ssortingng str) { byte[] data = UTF8Encoding.UTF8.GetBytes (str); data = data.Sha1Hash (); return BitConverter.ToSsortingng (data).Replace ("-", ""); } // Do the actual hashing public static byte[] Sha1Hash (this byte[] data) { using (SHA1Managed sha1 = new SHA1Managed ()) { return sha1.ComputeHash (data); }