Ich möchte zufällige eindeutige Zeichenfolgen generieren, wie sie beispielsweise von der MSDN-Bibliothek ( Fehlerobjekt ) generiert werden . Ein String wie 't9zk6eay' sollte generiert werden.
97
Ich möchte zufällige eindeutige Zeichenfolgen generieren, wie sie beispielsweise von der MSDN-Bibliothek ( Fehlerobjekt ) generiert werden . Ein String wie 't9zk6eay' sollte generiert werden.
string randoms = Guid.NewGuid().ToString().Replace("-", string.Empty).Replace("+", string.Empty).Substring(0, 4);
mehr finden Sie hierAntworten:
Die Verwendung von Guid wäre ein ziemlich guter Weg, aber um etwas zu erhalten, das Ihrem Beispiel ähnelt, möchten Sie es wahrscheinlich in eine Base64-Zeichenfolge konvertieren:
Ich werde "=" und "+" los, um Ihrem Beispiel ein wenig näher zu kommen, andernfalls erhalten Sie "==" am Ende Ihrer Zeichenfolge und ein "+" in der Mitte. Hier ist ein Beispiel für eine Ausgabezeichenfolge:
"OZVV5TpP4U6wJthaCORZEQ"
quelle
Convert.ToBase64String
geht, finden Sie hier .new Guid()
ohne "Hacking" (Manipulation der Uhr oder interner Windows-Datenstrukturen) Kollisionen verursacht . Sie können beliebig viele Kerne, Threads, Synchronisationsprimitive usw. verwenden.Update 23.01.2016
Wenn Sie diese Antwort nützlich finden, interessieren Sie sich möglicherweise für eine einfache (~ 500 SLOC) Kennwortgenerierungsbibliothek, die ich veröffentlicht habe :
Dann können Sie zufällige Zeichenfolgen wie in der folgenden Antwort generieren:
Ein Vorteil der Bibliothek besteht darin, dass der Code besser herausgerechnet wird, sodass Sie sichere Zufälligkeit für mehr als das Generieren von Zeichenfolgen verwenden können . Schauen Sie sich die Projektseite anWeitere Informationen finden .
Ursprüngliche Antwort
Da noch niemand sicheren Code bereitgestellt hat, poste ich Folgendes, falls jemand es nützlich findet.
Vielen Dank an Ahmad für den Hinweis, wie der Code auf .NET Core funktioniert.
quelle
.netcore
: Ersetzenvar rng = new RNGCryptoServiceProvider()
durchvar rng = RandomNumberGenerator.Create()
Ich würde darauf hinweisen, dass GUIDs keine Zufallszahlen sind . Sie sollten nicht als Grundlage verwendet werden, um etwas zu generieren, von dem Sie erwarten, dass es völlig zufällig ist (siehe http://en.wikipedia.org/wiki/Globally_Unique_Identifier ):
Verwenden Sie stattdessen einfach die C # Random-Methode. So etwas ( Code hier gefunden ):
GUIDs sind in Ordnung, wenn Sie etwas Einzigartiges möchten (wie einen eindeutigen Dateinamen oder Schlüssel in einer Datenbank), aber sie sind nicht gut für etwas, das Sie zufällig sein möchten (wie ein Kennwort oder ein Verschlüsselungsschlüssel). Das hängt also von Ihrer Anwendung ab.
Bearbeiten . Microsoft sagt, dass Random auch nicht so toll ist ( http://msdn.microsoft.com/en-us/library/system.random(VS.71).aspx ):
quelle
Ich habe die @ Michael Kropats-Lösung vereinfacht und eine LINQ-ähnliche Version erstellt.
quelle
Ich denke nicht, dass sie wirklich zufällig sind, aber ich vermute, das sind einige Hashes.
Wenn ich eine zufällige Kennung benötige, verwende ich normalerweise eine GUID und konvertiere sie in ihre "nackte" Darstellung:
quelle
Versuchen Sie eine Kombination zwischen Guid und Time.Ticks
quelle
Ich bin überrascht, warum es keine CrytpoGraphic-Lösung gibt. Die GUID ist eindeutig, aber nicht kryptografisch sicher . Siehe diese Dotnet-Geige.
Falls Sie mit einem Guid voranstellen möchten:
Eine sauberere alphanumerische Zeichenfolge:
quelle
Michael Kropats Lösung in VB.net
quelle
Das funktioniert perfekt für mich
quelle
Dies wurde für verschiedene Sprachen gefragt. Hier ist eine Frage zu Passwörtern die auch hier gelten sollte.
Wenn Sie die Zeichenfolgen für die URL-Verkürzung verwenden möchten, benötigen Sie außerdem ein Wörterbuch <> oder eine Datenbankprüfung, um festzustellen, ob bereits eine generierte ID verwendet wurde.
quelle
Wenn Sie eine alphanumerische Zeichenfolge mit Kleinbuchstaben und möchten Großbuchstaben ([a-zA-Z0-9]) möchten, können Sie Convert.ToBase64String () für eine schnelle und einfache Lösung verwenden.
Überprüfen Sie hinsichtlich der Eindeutigkeit das Geburtstagsproblem, um zu berechnen, wie wahrscheinlich eine Kollision ist (A) die Länge der generierten Zeichenfolgen und (B) die Anzahl der generierten Zeichenfolgen.
quelle
quelle
Holen Sie sich den eindeutigen Schlüssel mithilfe des GUID-Hash-Codes
quelle