Wie kann ich eine zufällige 8 Zeichen alphanumerische Zeichenfolge in C# generieren?
Antworten
Zu viele Anzeigen?Hier ist eine Variante der Lösung von Eric J., d.h. kryptographisch einwandfrei, für WinRT (Windows Store App):
public static string GenerateRandomString(int length)
{
var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
var result = new StringBuilder(length);
for (int i = 0; i < length; ++i)
{
result.Append(CryptographicBuffer.GenerateRandomNumber() % chars.Length);
}
return result.ToString();
}
Wenn es auf die Leistung ankommt (vor allem, wenn die Länge hoch ist):
public static string GenerateRandomString(int length)
{
var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
var result = new System.Text.StringBuilder(length);
var bytes = CryptographicBuffer.GenerateRandom((uint)length * 4).ToArray();
for (int i = 0; i < bytes.Length; i += 4)
{
result.Append(BitConverter.ToUInt32(bytes, i) % chars.Length);
}
return result.ToString();
}
Ich weiß nicht, wie kryptographisch fundiert dies ist, aber es ist bei weitem lesbarer und prägnanter als die komplizierteren Lösungen (imo), und es sollte "zufälliger" sein als System.Random
-basierten Lösungen.
return alphabet
.OrderBy(c => Guid.NewGuid())
.Take(strLength)
.Aggregate(
new StringBuilder(),
(builder, c) => builder.Append(c))
.ToString();
Ich kann mich nicht entscheiden, ob ich diese oder die nächste Version "hübscher" finde, aber sie führen zu genau den gleichen Ergebnissen:
return new string(alphabet
.OrderBy(o => Guid.NewGuid())
.Take(strLength)
.ToArray());
Zugegeben, es ist nicht auf Geschwindigkeit optimiert. Wenn Sie also unbedingt Millionen von zufälligen Zeichenfolgen pro Sekunde generieren müssen, sollten Sie eine andere Lösung wählen!
HINWEIS: Diese Lösung lässt keine Wiederholungen von Symbolen im Alphabet zu, und das Alphabet MUSS gleich groß oder größer als die Ausgabezeichenkette sein, so dass dieser Ansatz unter Umständen weniger wünschenswert ist.
2 Stimmen
Welcher Rest
8 Stimmen
O s o s
2 Stimmen
Es wäre schön, wenn die Sprachlokalisierung in diese Frage einbezogen würde. Vor allem, wenn Ihre Benutzeroberfläche für Chinesisch oder Bulgarisch geeignet sein soll!
0 Stimmen
Siehe auch Wie erstellt man eine zufällige Folge von Zahlen und Buchstaben mit einer Länge von 5?
22 Stimmen
Ein Beitrag mit so vielen positiven Bewertungen und so vielen guten Antworten hat es nicht verdient, als geschlossen markiert zu werden. Ich stimme dafür, dass es wieder geöffnet wird.
0 Stimmen
Als Kryptograph sehe ich hauptsächlich absolut falsche Antworten mit vielen positiven Bewertungen, um ehrlich zu sein. Wenn Sie eine sichere Zufallszeichenkette haben wollen, dann beschäftigen Sie sich bitte selbst mit Zufälligkeit und unvoreingenommenen Verteilungen, denn die stehen nicht auf der ersten Seite der Antworten.
0 Stimmen
Übrigens, hier ist eine Sammlung von Erzeugung von Zufallszeichenfolgen in verschiedenen Programmiersprachen .
0 Stimmen
Wer hat etwas von Sicherheit gesagt? Der OP fragte nur, wie man eine Zeichenkette erzeugt.