Ich verwende den folgenden C # -Code, um einen MD5-Hash aus einer Zeichenfolge zu berechnen. Es funktioniert gut und generiert eine 32-stellige Hex-Zeichenfolge wie folgt:
900150983cd24fb0d6963f7d28e17f72
string sSourceData;
byte[] tmpSource;
byte[] tmpHash;
sSourceData = "MySourceData";
//Create a byte array from source data.
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);
// and then convert tmpHash to string...
Gibt es eine Möglichkeit, Code wie diesen zu verwenden, um eine 16-stellige Hex-Zeichenfolge (oder eine 12-stellige Zeichenfolge) zu generieren? Eine 32-stellige Hex-Zeichenfolge ist gut, aber ich denke, es wird für den Kunden langweilig sein, den Code einzugeben!
Antworten:
Wie pro MSDN
MD5 erstellen:
quelle
quelle
BitConverter
Windows und Linux nicht auf die gleiche Weise funktioniert, siehe diese Frage: stackoverflow.com/questions/11454004/…Beim Versuch, eine Zeichenfolgendarstellung von MD5-Hash mit LINQ zu erstellen, handelte es sich bei keiner der Antworten um LINQ-Lösungen, weshalb dies dem Smorgasbord der verfügbaren Lösungen hinzugefügt wurde.
quelle
return string.Join( "", hash.ComputeHash( Encoding.UTF8.GetBytes(observedText) ).Select( x => x.ToString("x2") ) );
return string.Concat( hash.ComputeHash( Encoding.UTF8.GetBytes(observedText) ).Select( x => x.ToString("x2") ) );
stattdessen vor. Es ist etwas kürzer, möglicherweise klarer und arbeitet geringfügig schneller (<10% Leistungssteigerung).Kommt ganz darauf an, was Sie erreichen wollen. Technisch gesehen könnten Sie nur die ersten 12 Zeichen aus dem Ergebnis des MD5-Hashs entnehmen, aber die Spezifikation von MD5 besteht darin, ein 32-Zeichen-Zeichen zu generieren.
Das Reduzieren der Größe des Hash verringert die Sicherheit und erhöht die Wahrscheinlichkeit von Kollisionen und Systemausfällen.
Wenn Sie uns mehr darüber mitteilen, was Sie erreichen möchten, können wir Ihnen möglicherweise weiterhelfen.
quelle
Sie können
Convert.ToBase64String
die 16-Byte-Ausgabe von MD5 in eine Zeichenfolge mit ~ 24 Zeichen konvertieren. Ein bisschen besser, ohne die Sicherheit zu beeinträchtigen. (j9JIbSY8HuT89/pwdC8jlw==
für dein Beispiel)quelle
Unterstützt String und Dateistream.
Beispiele
- -
quelle
Ich nehme an, es ist besser, die UTF-8-Codierung in der Zeichenfolge MD5 zu verwenden.
quelle
Ein MD5-Hash ist 128 Bit, Sie können ihn also nicht mit weniger als 32 Zeichen hexadezimal darstellen ...
quelle
quelle
Diese Lösung erfordert c # 8 und nutzt
Span<T>
. Beachten Sie, dass Sie bei Bedarf immer noch aufrufen müssen, um.Replace("-", string.Empty).ToLowerInvariant()
das Ergebnis zu formatieren.quelle
Eine schnellere Alternative zur vorhandenen Antwort für .NET Core 2.1 und höher:
Sie können es noch weiter optimieren, wenn Sie sicher sind, dass Ihre Zeichenfolgen klein genug sind und die Codierung ersetzen. GetBytes durch unsichere int GetBytes-Alternative (ReadOnlySpan-Zeichen, Span-Bytes).
quelle
quelle
https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5?view=netframework-4.7.2
quelle
Ich möchte eine Alternative anbieten, die mindestens 10% schneller zu sein scheint als die Antwort von craigdfrench in meinen Tests (.NET 4.7.2):
Wenn Sie es vorziehen, oben zu haben
using System.Runtime.Remoting.Metadata.W3cXsd2001;
, kann der Methodenkörper zu einem leichter lesbaren Einzeiler gemacht werden:Offensichtlich, aber der Vollständigkeit halber würde es im Kontext von OP verwendet als:
quelle
Idk alles über 16 Zeichen Hex-Strings ....
Aber hier ist meine zum Erstellen von MD5-Hash in einer Zeile.
quelle