Ich möchte gegebenes byte[]
Array mit der Verwendung von SHA1
Algorithmus mit der Verwendung von hashen SHA1Managed
.
Der byte[]
Hash stammt aus dem Unit-Test.
Der erwartete Hash ist 0d71ee4472658cd5874c5578410a9d8611fc9aef
(Groß- und Kleinschreibung beachten).
Wie kann ich das erreichen?
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
}
}
hex(e) == hex(E)
Antworten:
Für diejenigen, die eine "Standard" -Textformatierung des Hashs wünschen, können Sie Folgendes verwenden:
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(); } }
Dies erzeugt einen Hash wie
0C2E99D0949684278C30B9369B82638E1CEAD415
.Oder für eine Code-Golfversion:
static string Hash(string input) { var hash = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input)); return string.Concat(hash.Select(b => b.ToString("x2"))); }
quelle
IDisposable
, aber ein kurzer Blick auf die Referenzquelle zeigt, dass in.Dispose()
x2
bedeutet Kleinbuchstaben,X2
ist Großbuchstabenpublic string Hash(byte [] temp) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(temp); return Convert.ToBase64String(hash); } }
BEARBEITEN:
Sie können die Codierung auch beim Konvertieren des Byte-Arrays in einen String wie folgt angeben:
return System.Text.Encoding.UTF8.GetString(hash);
oder
return System.Text.Encoding.Unicode.GetString(hash);
quelle
0d71ee4472658cd5874c5578410a9d8611fc9aef
als Ausgabe erhalten soll?Damit bin ich gegangen. Für diejenigen unter Ihnen, die optimieren möchten, besuchen Sie 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))); } }
quelle
Der schnellste Weg ist folgender:
public static string GetHash(string input) { return string.Join("", (new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToString("X2")).ToArray()); }
Für die Ausgabe kleiner Zeichen verwenden Sie
x2
anstelle vonX2
quelle
Sie können "den Wert für das angegebene Byte-Array berechnen" mit
ComputeHash
:var hash = sha1.ComputeHash(temp);
Wenn Sie das Ergebnis in Zeichenfolgendarstellung analysieren möchten, müssen Sie die Bytes mithilfe des
{0:X2}
Formatbezeichners formatieren.quelle
Ich werde meinen Hut hier reinwerfen:
(als Teil einer statischen Klasse, da dieses Snippet zwei Erweiterungen enthält)
//hex encoding of the hash, in uppercase. public static string Sha1Hash (this string str) { byte[] data = UTF8Encoding.UTF8.GetBytes (str); data = data.Sha1Hash (); return BitConverter.ToString (data).Replace ("-", ""); } // Do the actual hashing public static byte[] Sha1Hash (this byte[] data) { using (SHA1Managed sha1 = new SHA1Managed ()) { return sha1.ComputeHash (data); }
quelle