Wie kann ich das Hash-Ergebnis, bei dem es sich um ein Byte-Array handelt, in einen String konvertieren?
byte[] bytePassword = Encoding.UTF8.GetBytes(password);
using (MD5 md5 = MD5.Create())
{
byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
}
Ich muss byteHashedPassword
in einen String konvertieren .
c#
hash
cryptography
md5
cryptographic-hash-function
Blankman
quelle
quelle
Convert.ToBase64String()
Ich fand das immer am bequemsten:
string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");
Aus irgendeinem Grund setzt BitConverter gerne Bindestriche zwischen Bytes, sodass das Ersetzen diese nur entfernt.
Update: Wenn Sie "Kleinbuchstaben" bevorzugen, führen Sie einfach ein .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 Zeichenfolgen und Größenänderungen vorgenommen werden.
quelle
Sie können Byte-Arrays verwenden
Convert.ToBase64String
undConvert.FromBase64String
einfach in Zeichenfolgen konvertieren.quelle
Wenn Sie sich im Lager "Hex Preference" 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
quelle
Da es sich um einen Hash handelt, enthält er möglicherweise Werte, die in einer normalen Zeichenfolge nicht angezeigt werden können. Daher ist es am besten, ihn in eine Base64-codierte Zeichenfolge zu konvertieren.
string s = Convert.ToBase64String(bytes);
und verwenden
byte[] bytes = Convert.FromBase64(s);
um die Bytes zurückzubekommen.
quelle
Nun, Sie könnten den String-Konstruktor verwenden, der Bytes und eine Codierung benötigt, aber Sie werden wahrscheinlich Schwierigkeiten haben, einen String daraus zu verwalten, da er viele lustige Zeichen enthalten könnte (Null-Bytes, Zeilenumbrüche, Steuerzeichen usw.).
Der beste Weg, dies zu tun, wäre, es mit Base 64 zu codieren, um eine schöne Zeichenfolge zu erhalten, mit der man leicht arbeiten kann:
string s = Convert.ToBase64String(bytes);
Und um von dieser Zeichenfolge zurück zu einem Byte-Array zu gelangen:
byte[] bytes = Convert.FromBase64String(s);
quelle
Für alle Interessierten können Sie mit einem von mir erstellten Nuget-Paket namens CryptoStringify eine Zeichenfolge mithilfe einer sauberen 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
HashAlgorithm
undKeyedHashAlgorithm
funktioniert daher auch mit SHA1, HMACSHA1, SHA256 usw.https://www.nuget.org/packages/cryptostringify
quelle