Tilfældig Base64-generator

Lav tilfældige Base64-strenge med din browsers sikre generator af tilfældige tal. Angiv længden i bytes eller tegn, generér op til 1000 ad gangen, og vælg standard- eller URL-sikkert output.

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Angiv Længde, og vælg under Enhed, om den tæller bytes tilfældige data eller Base64-tegn. Brug bytes til nøgler: 32 bytes svarer til en nøgle på 256 bit.
  2. Angiv under Antal, hvor mange strenge du skal bruge, og vælg Skilletegn mellem dem: Ny linje, Komma eller Mellemrum.
  3. Vælg Standard eller URL-sikker under Variant. Med enheden bytes kan du også slå Udfyldning fra, hvis målsystemet ikke forventer =-tegn.
  4. Klik på Generér for at få nye værdier, og kopiér derefter hele listen med Kopiér alle, eller hent den med Download.

Bytes, tegn og entropi

Styrken af en tilfældig streng måles i bit entropi. Hver tilfældig byte bidrager med 8 bit, så 16 bytes giver 128 bit, og 32 bytes giver 256 bit. Base64 ændrer kun, hvordan disse bytes skrives: Hvert tegn bærer 6 bit, og hver gruppe på 3 bytes bliver til 4 tegn. Værktøjet viser entropien for hver streng, så du kan kontrollere den med det samme.

Med enheden bytes afkodes outputtet til præcis så mange tilfældige bytes, og det er netop det, nøgler og hemmeligheder kræver. Med enheden tegn får du et præcist antal tegn, som hver især er valgt med lige stor sandsynlighed fra alfabetet på 64 tegn. Brug den, når et system kræver et token med en fast længde og gemmer det som tekst.

BytesBase64-tegnEntropiTypisk anvendelse
121696 bitNonce (IV) til AES-GCM
1624 (22 uden udfyldning)128 bitSaltværdier, sessions- og CSRF-tokens, AES-128-nøgler
3244 (43 uden udfyldning)256 bitAES-256- og HMAC-SHA256-nøgler, HS256-hemmeligheder, API-nøgler
6488 (86 uden udfyldning)512 bitHMAC-SHA512-nøgler, HS512-hemmeligheder

Hvor tilfældige Base64-værdier bruges

  • JWT-hemmeligheder. RFC 7518 kræver en HMAC-nøgle, der er mindst lige så lang som hashoutputtet: 32 bytes for HS256, 48 for HS384 og 64 for HS512. Nogle biblioteker bruger den hemmelige streng, som den er, mens andre Base64-afkoder den først, så tjek, hvad dit bibliotek forventer. JWT-dekoderen verificerer HS256- til HS512-signaturer med begge slags hemmeligheder, og HMAC-generatoren accepterer en nøgle som tekst, hex eller Base64.
  • Applikationsnøgler. Laravel gemmer for eksempel en krypteringsnøgle på 32 bytes i sin .env-fil som APP_KEY=base64:..., i samme form som en streng på 32 bytes fra dette værktøj.
  • Kubernetes Secrets. Værdier under data skal være standard-Base64 med udfyldning. En streng, der er genereret med enheden bytes, varianten Standard og Udfyldning slået til, kan sættes direkte ind der, og pod'en modtager de rå, tilfældige bytes. Hvis applikationen forventer selve Base64-teksten, skal den i stedet stå under stringData.
  • Tokens i URL'er. Links til nulstilling af adgangskoder, invitationskoder og andre tokens, der sendes i URL'er, bør bruge den URL-sikre variant, som erstatter + og / med - og _. Se Base64URL for flere detaljer.

Hvorfor crypto.getRandomValues og ikke Math.random

Math.random() er en hurtig generator til almindelige formål. Dens output er ikke designet til at være uforudsigeligt, og i nogle JavaScript-motorer kan den interne tilstand rekonstrueres ud fra en håndfuld værdier. Dette værktøj bruger crypto.getRandomValues(), en kryptografisk sikker generator, der får sin startværdi (seed) fra styresystemet, altså samme slags kilde som bag openssl rand og Pythons secrets-modul. Værdierne oprettes på din enhed og bliver aldrig sendt eller gemt.

Generér tilfældig Base64 i kode

# Shell: 32 tilfældige bytes som Base64 (44 tegn)
openssl rand -base64 32
head -c 32 /dev/urandom | base64

# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32)        # URL-sikker, uden udfyldning, 43 tegn

// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url');   // URL-sikker, uden udfyldning

// Browser
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));

Ofte stillede spørgsmål

Hvor lang skal en tilfældig nøgle eller hemmelighed være?

16 bytes (128 bit) er nok til værdier, der kun skal være unikke og umulige at gætte, for eksempel sessions-id'er, CSRF-tokens og saltværdier. Brug 32 bytes (256 bit) til AES-256-nøgler, HMAC-SHA256-nøgler og HS256-hemmeligheder og 64 bytes til HMAC-SHA512 og HS512.

Er det det samme som openssl rand -base64 32?
Det giver samme slags værdi. Med en længde på 32 bytes, varianten Standard og Udfyldning slået til er hvert resultat 44 tegn langt, ender med ét = og afkodes til 32 tilfældige bytes. Selve værdierne er naturligvis forskellige hver gang.
Skal jeg bruge enheden bytes eller tegn?

Brug bytes, når strengen skal afkodes, som ved krypteringsnøgler og Kubernetes Secrets. Brug tegn, når et system har brug for et token med en præcis længde og bruger teksten, som den er. En streng fra enheden tegn kan kun med sikkerhed afkodes korrekt, når længden er et multiplum af 4.

Hvornår skal jeg bruge den URL-sikre variant?
Når værdien skal indgå i en URL, en forespørgselsstreng, en cookie eller et filnavn. I standard-Base64 deler / URL-stier op, og + bliver til et mellemrum i formularkodede forespørgselsstrenge. URL-sikker Base64 bruger - og _ i stedet og skrives som regel uden udfyldning.
Bliver de genererede værdier gemt eller sendt nogen steder hen?

Nej. De genereres af JavaScript i din browser, sendes aldrig og forsvinder, når du forlader siden. Når du bruger en af dem som en rigtig hemmelighed, bør du opbevare den i en adgangskodeadministrator eller et lager til hemmeligheder og ikke i chatbeskeder eller supportsager.