Wie kann ich das Hash-Ergebnis, das ein Byte-Array ist, in eine Zeichenfolge konvertieren?
byte[] bytePassword = Encoding.UTF8.GetBytes(password);
using (MD5 md5 = MD5.Create())
{
byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
}
Ich muss byteHashedPassword
in einen String konvertieren.
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();
}
Sie können es dann als Erweiterungsmethode aufrufen:
string hexString = byteArray.ToHex(false);
Ich fand das immer am bequemsten:
string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");
Aus irgendeinem Grund möchte BitConverter Bindestriche zwischen den Bytes einfügen, so dass der Ersetzer sie einfach entfernt.
Update: Wenn Sie "Kleinbuchstaben" bevorzugen, führen Sie einfach einen .ToLower () und einen Boom aus.
Beachten Sie, dass dies teuer sein kann, wenn Sie dies als enge Schleife und viele Operationen ausführen, da mindestens zwei implizite Zeichenfolgenumwandlungen und Größenänderungen stattfinden.
Sie können Convert.ToBase64String
und Convert.FromBase64String
verwenden, um Byte-Arrays auf einfache Weise in Strings zu konvertieren.
Wenn Sie sich im Lager "Hex-Präferenz" befinden, können Sie dies tun. Dies ist im Grunde eine minimale Version der Antwort von Philippe Leybaert.
string.Concat(hash.Select(x => x.ToString("X2")))
B1DB2CC0BAEE67EA47CFAEDBF2D747DF
Da es sich um einen Hash handelt, gibt es möglicherweise Werte, die nicht in einer normalen Zeichenfolge angezeigt werden können. Daher ist es am besten, ihn in eine Base64-kodierte Zeichenfolge zu konvertieren.
string s = Convert.ToBase64String(bytes);
und verwenden
byte[] bytes = Convert.FromBase64(s);
um die Bytes zurück zu bekommen.
Nun, Sie könnten den String-Konstruktor verwenden, der Bytes und eine Codierung verwendet, aber Sie werden wahrscheinlich einen schwer zu verwaltenden String daraus ziehen, da er viele lustige Zeichen enthalten kann (Null-Bytes, Zeilenumbrüche, Steuerzeichen usw.).
Der beste Weg, dies zu tun, wäre die Codierung mit der Basis 64, um eine Nice-Saite zu erhalten, mit der man leicht arbeiten kann:
string s = Convert.ToBase64String(bytes);
Und um von dieser Zeichenfolge zurück zu einem Bytearray zu gelangen:
byte[] bytes = Convert.FromBase64String(s);
Für alle, die an einem von mir erstellten Nuget-Paket namens CryptoStringify interessiert sind, können Sie eine Zeichenfolge mithilfe einer Nice-Clean-Syntax in eine Hash-Zeichenfolge konvertieren, ohne mit Byte-Arrays herumspielen zu müssen:
using (MD5 md5 = MD5.Create())
{
string strHashedPassword = md5.Hash(password);
}
Es ist eine Erweiterungsmethode für HashAlgorithm
und KeyedHashAlgorithm
und funktioniert daher auch für SHA1, HMACSHA1, SHA256 usw.