Skip to main content

Random String Generator

Generate random strings with configurable length and character set.

Geprüft von · Zuletzt geprüft

(1 - 10,000)
(1 - 100)

Einen Stapel zufaelliger Zeichenketten generieren

  1. Die Zeichenkettenlänge festlegen (1 bis 10.000 Zeichen). Typische Werte: 8 für Test-IDs, 16 für Gutscheincodes, 32 für Session-Tokens.
  2. Zeichensätze auswählen mit den vier Kontrollkästchen - Großbuchstaben A-Z, Kleinbuchstaben a-z, Ziffern 0-9 und Sonderzeichen !@#$%^&*()-_=+[]{}|;:,.<>?/. Jede angehakte Klasse wird zu einem Pool zusammengeführt.
  3. Benutzerdefinierte Zeichen hinzufügen, wenn du ein bestimmtes Alphabet benötigst - füge ABCDEF0123456789 für nur-Hex-Ausgabe, Emoji-Glyphen für spaßige IDs oder deine Produktpräfix-Zeichen für markierte Codes ein.
  4. Die Anzahl festlegen (1 bis 100), wie viele Zeichenketten in einem Stapel generiert werden sollen. Nuetzlich beim Seeden von Testdaten mit vielen verschiedenen Bezeichnern.
  5. Auf "Generieren" klicken. Jedes Zeichen wird via pool.charAt(Math.floor(Math.random() * pool.length)) gezogen. Klicke auf "Alle kopieren", um alle Zeichenketten durch Zeilenumbruch getrennt zu kopieren, oder kopiere eine einzelne Zeichenkette, indem du auf ihre Zeile klickst.

Math.random, CSPRNG und warum der Unterschied wichtig ist

Dieses Tool verwendet Math.random(), unterstützt von Xorshift128+ in V8 und ähnlichen linearen PRNGs in SpiderMonkey und JavaScriptCore. Diese sind statistisch gleichmäßig und schnell, aber NICHT kryptographisch sicher - ein Angreifer, der genug Ausgabe sieht, kann den internen Zustand rekonstruieren. Für Test-Fixtures, Nicht-Sicherheits-UUIDs und Gutscheincodes, bei denen du den Validierungsserver kontrollierst, ist das in Ordnung. Für alles, bei dem Vorhersagbarkeit eine Rolle spielt (Passwörter, Session-Tokens, API-Schlüssel, Nonces), verwende crypto.getRandomValues() - der Passwortgenerator auf dieser Website verwendet diesen Pfad. Das Web-Crypto-CSPRNG wird vom Betriebssystem geseedet (getrandom unter Linux, BCryptGenRandom unter Windows, SecRandomCopyBytes auf macOS). Wenn du sichere Zeichenketten für Zugangsdaten benötigst, verwende den Passwortgenerator.

Szenarien, wo Math.random die richtige Wahl ist

  • Test-Fixtures mit eindeutig aussehenden IDs seeden, bei denen der Datenbank-Primärschlüssel der echte Bezeichner ist und die zufällige Zeichenkette ein Anzeige- oder "geheimes" Feld für Tests ist.
  • Gutscheincodes oder Promo-Codes generieren, bei denen die serverseitige Validierung die Sicherheitsgrenze ist und der Code-Raum zu groß ist, um ihn während einer Marketing-Kampagne durch Brute-Force zu knacken.
  • Platzhalter-Inhalte für UI-Screenshots erstellen, bei denen du realistisch aussehende UUIDs oder Referenznummern möchtest, ohne echte Produktionsdaten preiszugeben.
  • Schnell Wegwerf-Benutzernamen oder Handles für Staging-Konten erstellen, bei denen Einzigartigkeit wichtig ist, Geheimnisschutz aber nicht.
  • URL-Slugs für Entwurfsdokumente in einem CMS erstellen, bei denen Kollisionen beim Einfügen abgefangen werden.
  • Mock-API-Antworten während der Frontend-Entwicklung bevölkern, bei denen jede zufällig aussehende Zeichenkette ausreicht.

Fallstricke, die spezifisch für nicht-kryptographische zufällige Zeichenketten sind

Der größte Fehler ist die Verwendung von Math.random-Ausgabe, wo CSPRNG-Ausgabe benötigt wird. Wenn du einen API-Schlüssel mit diesem Tool generierst und ihn an einen zahlenden Kunden ausgibst, kann ein Angreifer, der ein paar API-Schlüssel von anderen Kunden beobachtet, den internen Xorshift-Zustand vorhersagen und jeden Schlüssel aufzählen, den du jemals ausgegeben hast. Das ist nicht theoretisch - CVE-2012-2459 und ähnliche Schwachstellen in Node.js-Paketen lieferten vorhersagbare zufällige Tokens, weil Entwickler Math.random statt des Krypto-Moduls verwendet haben. Die zweite Falle ist verzerrte Verteilung, wenn die Pool-Größe den Math.random-Bereich nicht gleichmäßig teilt: Für einen 94-Zeichen-Pool ist die Verteilung innerhalb von 1e-15 der Gleichmäßigkeit und nicht wahrnehmbar; für einen 3-Zeichen-Pool kann man eine leichte Verzerrung sehen, die statistisch immer noch unsichtbar ist. Drittens, doppelte Zeichenketten: Das Tool dedupliziert nicht über einen Stapel, sodass das Generieren von 100 Zeichenketten der Länge 4 aus einem 26-Zeichen-Pool eine hohe Kollisionswahrscheinlichkeit gemäß der Geburtstagsgrenze hat (50-Prozent-Kollisionswahrscheinlichkeit bei 85 Zeichenketten). Wenn Einzigartigkeit erforderlich ist, erhöhe die Länge auf 10+ oder filtere nachträglich mit einem Set. Viertens ist das Maximum von 10.000 Zeichen eine UI-Reaktionsfähigkeits-Leitplanke; das Generieren von 100 Zeichenketten mit jeweils 10.000 Zeichen läuft immer noch schnell durch, aber das DOM-Rendering kann in älteren Browsern verzögert werden.

Die Geschichte und Spezifikation zufälliger Zeichenketten

Zufällige Zeichenketten stehen an der Schnittstelle von statistischer Gleichmäßigkeit und Informationstheorie. Eine Zeichenkette der Länge n, gleichmäßig aus einem Pool der Größe k gezogen, trägt n * log2(k) Bits Entropie - eine 16-Zeichen-Zeichenkette aus einem 94-Zeichen-Pool ist 105 Bits, was durch Brute-Force praktisch unknackbar ist. UUID v4 (RFC 9562, 2024, früher RFC 4122) ist ein 128-Bit-Zufallswert mit 122 Bits Zufälligkeit nach reservierten Versions- und Varianten-Bits, dargestellt als festes Bindestriche-getrenntes Hex-Format. Nano ID (von Y-Combinator-Unternehmen wie Supabase verwendet) ist eine moderne Alternative, die URL-sichere 21-Zeichen-Zeichenketten mit 126 Bits Entropie aus einem 64-Zeichen-Alphabet produziert. Base58 (Bitcoin-Adresskodierung) entfernt visuell mehrdeutige Zeichen 0/O/l/I aus Base64 und verwendet 58 Zeichen pro Position (5,86 Bits jeweils). Zur Einordnung: menschlich einprägsame Bezeichner wie BIP-39-Mnemonik-Phrasen (Bitcoin-Wallet-Wiederherstellung) verwenden 2048-Wort-Listen und erzeugen 11 Bits pro Wort, weshalb eine 12-Wort-Seed-Phrase 132 Bits Entropie hat. Dieses Tool implementiert UUID v4 oder Nano ID-Format nicht spezifisch, aber du kannst jedes von ihnen annähernd durch die Wahl des richtigen Zeichensatzes und der Länge erreichen.

Alternativen im Stack

Im CLI erzeugt openssl rand -hex 16 32 Hex-Zeichen kryptographischer Qualität; head -c 20 /dev/urandom | base64 gibt Base64. Node hat crypto.randomUUID() seit Version 14.17; Python hat secrets.token_urlsafe(); Go hat crypto/rand. Für Browser-Code ist crypto.getRandomValues(new Uint8Array(16)) das Grundelement; nanoid umhüllt es mit einem guten Zeichensatz und kollisionsresistenten Längen-Standards. Dieses Tool gewinnt bei der sofortigen Batch-Generierung ohne Code; es verliert bei der Math.random-Untermauerung. Für alles, das Wert schützt, verwende den Passwortgenerator; für Wegwerf-Testdaten ist dieses Tool schneller.

Häufig gestellte Fragen

Warum verwendet dieses Tool Math.random statt crypto.getRandomValues?

Historische Entscheidung, optimiert für die Geschwindigkeit der Batch-Generierung gegenüber kryptographischer Sicherheit. Math.random erzeugt mehrere hundert Millionen Werte pro Sekunde pro Thread ohne Allokationsaufwand; crypto.getRandomValues beinhaltet einen Durchgang durch das native Krypto-Modul, das für sehr große Stapel langsamer ist. Für den Zielanwendungsfall (Testdaten, Gutscheincodes, URL-Slugs) ist Math.random in Ordnung. Für Zugangsdaten oder Sicherheits-Tokens verwende den Passwortgenerator oder ein anderes CSPRNG-unterstütztes Tool; die Ausgabe dieses Generators sollte nichts Wertvolles schützen.

Ist das für die Generierung von API-Schlüsseln geeignet?

Nein. API-Schlüssel schützen echten Wert (Rate-Limit-Umgehung, authentifizierter Datenzugriff) und müssen für einen Angreifer, der andere Schlüssel gesehen hat, unvorhersagbar sein. Math.random wird aus Zeitstempeln geseedet und gibt den internen Zustand über Ausgaben weiter; ein Angreifer, der ein paar Schlüssel erntet, kann den PRNG-Zustand rekonstruieren und deine Schlüssel vorhersagen. Verwende den Passwortgenerator (der crypto.getRandomValues verwendet) für API-Schlüssel, oder generiere sie serverseitig mit crypto.randomBytes in Node, secrets.token_urlsafe in Python oder openssl rand in der Befehlszeile. Behandle die Ausgabe dieses Tools als nicht-geheim.

Verhindert das Tool doppelte Zeichenketten in einem Stapel?

Nein. Jede Zeichenkette wird unabhängig generiert, sodass Kollisionen möglich sind, insbesondere bei kurzen Zeichenketten und kleinen Zeichenpools. Gemäß der Geburtstagsgrenze hat das Generieren von 100 Zeichenketten der Länge 4 aus einem 26-Zeichen-Alphabet eine Kollisionswahrscheinlichkeit von ca. 50 Prozent für mindestens ein Duplikat (Quadratwurzel aus 26^4 ist etwa 85). Um Einzigartigkeit zu garantieren, erhöhe die Länge auf 10 oder mehr, oder filtere die Ausgabe mit einem Set oder einem Deduplizierungsschritt in deinem nachgelagerten Code.

Welche Sonderzeichen sind im "Spezial"-Satz enthalten?

Der Pool ist !@#$%^&*()-_=+[]{}|;:,.<>?/ - 27 Zeichen, ausgewählt für breite Kompatibilität mit den meisten Webformularen und URL-Codierungsregeln. Zeichen, die NICHT im Satz enthalten sind, umfassen Backticks, Backslashes, einfache und doppelte Anführungszeichen, Tilde und das Caret-am-Anfang- Zeilenvorschubzeichen - diese neigen dazu, Shell-Skripte, SQL-Eingaben und CSV-Parser zu brechen, wenn sie ohne Escaping eingefügt werden. Wenn du einen anderen Spezialzeichen-Satz benötigst, füge deine eigenen Zeichen in das Feld "Benutzerdefinierte Zeichen" ein und deaktiviere das Standard-Spezial-Kästchen.

Wird die Ausgabe an einen Server gesendet?

Nein. Math.random läuft in der V8/SpiderMonkey/JavaScriptCore-Engine auf deinem Gerät, und generierte Zeichenketten leben im Preact-Komponentenzustand, bis du sie kopierst oder den Tab schließt. Es gibt keinen Fetch, kein Analytics-Event mit den Zeichenketten und keine localStorage-Persistenz. Das Trennen des Netzwerks nach dem Laden der Seite beeinflusst die Funktionalität nicht.

Wie schneidet das im Vergleich zu UUID v4 ab?

UUID v4 (RFC 9562) hat ein festes 36-Zeichen-Format mit Bindestrichen und bestimmten Bits, die für Version/Variante reserviert sind, was 122 Bits Zufälligkeit ergibt. Dieses Tool kann UUID-ähnliche Ausgaben erzeugen, indem die Länge 32 und ein 0-9a-f benutzerdefinierter Pool eingestellt wird, aber es fügt keine Bindestriche ein und reserviert keine Versions-Bits - das Ergebnis ist keine parsierbare UUID. Für tatsächliche UUID v4 verwende crypto.randomUUID() in modernen Browsern.

Kann ich mit diesem Tool ein zufälliges Passwort generieren?

Du kannst, aber du solltest es nicht. Passwörter benötigen CSPRNG-Zufälligkeit, weil ein Angreifer, der ein paar generierte Werte sieht, den internen Zustand von Math.random rekonstruieren kann. Verwende den Passwortgenerator auf dieser Website, der crypto.getRandomValues verwendet. Für Test-Konto-Passwörter im Staging ist dieses Tool akzeptabel, da das Bedrohungsmodell geringer ist.

Gibt es eine Möglichkeit, visuell ähnliche Zeichen wie 0/O und l/I zu vermeiden?

Ja. Deaktiviere alle Standard-Sätze und füge dein eigenes Alphabet ohne die mehrdeutigen Zeichen ein - zum Beispiel ABCDEFGHJKLMNPQRSTUVWXYZ23456789 schließt 0, O, 1, I und l aus und entspricht den Base58-Konventionen, die für Bitcoin-Adressen verwendet werden. Das ist nützlich, wenn Benutzer Codes von einer gedruckten Quelle manuell abtippen, da es Lesefehler eliminiert. Für maschinell konsumierte Zeichenketten, bei denen Schriftarten alle Zeichen deutlich rendern, spielt Mehrdeutigkeit keine Rolle.

Mehr Text Tools