Skip to content

TOTP-/2FA-codegenerator

Genereer een TOTP-/2FA-code uit een Base32-secret — 100% in je browser, je secret verlaat nooit je apparaat. QR-installatie + codeverificatie.

Geen tracking Draait in je browser Gratis
Lokaal berekend in je browser — je secret verlaat nooit je apparaat.
Geavanceerde opties
Huidige code
------
Volgende code: ------
Volgt het gedrag van RFC 6238 / RFC 4226 met output die is gecontroleerd tegen de gepubliceerde testvectoren en een onafhankelijke authenticator-app — Go Tools Security Team · Jun 12, 2026

Wat is een TOTP-/2FA-codegenerator?

Een TOTP-generator zet een gedeeld secret om in de roterende eenmalige code die tweefactorauthenticatie aandrijft. TOTP — Time-based One-Time Password, gedefinieerd in RFC 6238 — neemt een Base32-secret en de huidige tijd, deelt de tijd op in vaste stappen (standaard 30 seconden) en voert een HMAC uit over de stappenteller om een korte numerieke code af te leiden. Omdat zowel je authenticator-app als de server hetzelfde secret bewaren en dezelfde klok aflezen, berekenen ze de identieke code zonder die ooit via het netwerk uit te wisselen. Dat is precies het doel van 2FA: zelfs als je wachtwoord lekt, heeft een aanvaller nog steeds de code nodig die alleen jouw secret op dit moment kan produceren.

"The TOTP algorithm is a time-based variant of the HOTP algorithm... TOTP = HOTP(K, T), where T is an integer representing the number of time steps between the initial counter time T0 and the current Unix time." — RFC 6238, Section 4

Deze tool doet drie taken op één pagina. Hij genereert een live code uit elk Base32-secret met een aftelling en voorbeeld van de volgende code; hij stelt een gloednieuw secret in en bouwt de otpauth://-URI en QR-code die je in een authenticator-app scant; en hij verifieert een code tegen een secret met een tolerantie van ±1 tijdstap, net zoals echte servers een net geroteerde code accepteren. Alles loopt via de native Web Crypto API van de browser, zonder afhankelijkheden en zonder netwerkverzoeken.

Ontwikkelaars grijpen voortdurend naar een TOTP-generator: om de exacte code te reproduceren die de app van een gebruiker toont tijdens het debuggen van een 2FA-aanmelding, om een secret en QR voor een nieuw account aan te maken, om te bevestigen dat een verificatievenster op de server overeenkomt met wat gebruikers ervaren, of om deterministische fixtures te bouwen voor end-to-end-tests van een tweefactorproces. Omdat het secret een langlevende sleutel is — iedereen die het heeft kan elke toekomstige code genereren — moet het beschermd worden als een wachtwoord. Combineer deze tool met onze willekeurige-wachtwoordgenerator voor de sterke wachtwoorden en herstelcodes naast 2FA, en met de QR-codegenerator wanneer je een losse aanmeldingsafbeelding nodig hebt. Voor het ondertekenen van de JSON Web Tokens die vaak bovenop een geauthenticeerde sessie meeliften, zie de JWT-encoder.

// Generate a TOTP code in the browser with the Web Crypto API
// (SHA-1, 6 digits, 30s period — RFC 6238 defaults)
async function generateTotp(base32Secret, time = Date.now()) {
  // Decode the Base32 secret to raw bytes (A-Z, 2-7)
  const alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
  let bits = '';
  for (const c of base32Secret.replace(/=+$/, '').toUpperCase())
    bits += alpha.indexOf(c).toString(2).padStart(5, '0');
  const bytes = new Uint8Array(
    bits.match(/.{8}/g).map((b) => parseInt(b, 2)));

  // Counter = number of 30s steps since the Unix epoch (8-byte big-endian)
  const counter = Math.floor(time / 1000 / 30);
  const msg = new Uint8Array(8);
  let c = counter;
  for (let i = 7; i >= 0; i--) { msg[i] = c & 0xff; c = Math.floor(c / 256); }

  const key = await crypto.subtle.importKey(
    'raw', bytes, { name: 'HMAC', hash: 'SHA-1' }, false, ['sign']);
  const hmac = new Uint8Array(await crypto.subtle.sign('HMAC', key, msg));

  // Dynamic truncation (RFC 4226) -> 6-digit code
  const off = hmac[hmac.length - 1] & 0x0f;
  const bin = ((hmac[off] & 0x7f) << 24) | (hmac[off + 1] << 16) |
              (hmac[off + 2] << 8) | hmac[off + 3];
  return (bin % 1_000_000).toString().padStart(6, '0');
}

const code = await generateTotp('JBSWY3DPEHPK3PXP');
// -> a 6-digit code that rotates every 30 seconds

Belangrijkste functies

Live code met aftelling

Plak een Base32-secret en de huidige TOTP-code verschijnt direct met een afteltimer van 30 seconden en een voorbeeld van de volgende code — geen Genereren-knop, geen wachten.

Secret- & QR-installatie

Genereer een willekeurig Base32-secret en krijg vervolgens de otpauth://-URI en een QR-code om rechtstreeks in Google Authenticator, Authy of 1Password te scannen.

Ingebouwde codeverificatie

Controleer een code tegen een secret met dezelfde tolerantie van ±1 tijdstap die echte servers gebruiken, zodat een net geroteerde code nog steeds valideert.

Instelbaar algoritme & cijfers

Schakel tussen SHA-1, SHA-256 en SHA-512, kies 6 of 8 cijfers en stel een periode van 30s of 60s in om aan de eisen van elke provider te voldoen.

Secret verlaat nooit je browser

Elke code wordt lokaal berekend via de native Web Crypto API. Er wordt niets geüpload, gelogd of opgeslagen — verifieerbaar zo, zelfs offline.

Geen afhankelijkheden

Uitsluitend gebouwd op de Web Crypto API van de browser — geen externe bibliotheken, geen telemetrie en geen enkel netwerkverzoek.

Voorbeelden van de TOTP-generator

Standaard 6-cijferige TOTP (SHA-1, 30s)

secret: JBSWY3DPEHPK3PXP
algorithm: SHA-1
digits: 6
period: 30s
Code: 282760  ·  expires in 30s

Het canonieke RFC 6238-testsecret met de standaardinstellingen die elke gangbare app gebruikt — SHA-1, 6 cijfers, een periode van 30 seconden. De code is tijdgebaseerd, dus de exacte waarde hangt af van de huidige tijd; de tool toont een live aftelling en de volgende code.

8-cijferige enterprise-TOTP (SHA-256)

secret: JBSWY3DPEHPK3PXP
algorithm: SHA-256
digits: 8
period: 30s
Code: 31094217  ·  expires in 30s

Sommige enterprise- en hoogbeveiligde systemen geven 8-cijferige codes uit, ondertekend met SHA-256 in plaats van de SHA-1-standaard. Stem het algoritme, het aantal cijfers en de periode exact af op wat je server verwacht, anders valideert de gegenereerde code niet.

otpauth://-installatie-URI voor authenticator-apps

issuer: Acme
account: alice@example.com
secret: JBSWY3DPEHPK3PXP
otpauth://totp/Acme:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Acme&algorithm=SHA1&digits=6&period=30

De tool bouwt een standaard otpauth://-URI en geeft deze weer als QR-code. Scan hem met Google Authenticator, Authy of 1Password — of plak de URI rechtstreeks — om het secret op je apparaat in te stellen.

De TOTP-generator gebruiken

  1. 1

    Plak een Base32-secret

    Plak op het tabblad Genereren je Base32-secret (bijvoorbeeld JBSWY3DPEHPK3PXP). De huidige TOTP-code verschijnt direct met een aftelling van 30 seconden — geen Genereren-knop.

  2. 2

    Pas geavanceerde opties aan (optioneel)

    Open de geavanceerde opties om het algoritme (SHA-1/256/512), het aantal cijfers (6 of 8) of de periode (30 of 60s) af te stemmen op wat je provider heeft uitgegeven.

  3. 3

    Instellen of verifiëren

    Gebruik het tabblad Instellen om een secret en QR voor een authenticator-app te genereren, of het tabblad Verifiëren om een code te controleren tegen een secret met een tolerantie van ±1 tijdstap.

Veelgemaakte fouten

Afwijkend algoritme of aantal cijfers

Een secret dat voor SHA-256 of 8 cijfers is uitgegeven, produceert een totaal andere code onder de standaard SHA-1 / 6 cijfers. Stem de parameters van de provider exact af.

✗ Fout
secret + SHA-1/6 digits  // but server expects SHA-256/8
✓ Correct
algorithm: SHA-256, digits: 8  // match the otpauth:// URI

Klokafwijking

Als de apparaatklok meer dan één tijdstap afwijkt, valideert de code niet. Synchroniseer de systeemklok voordat je codes vergelijkt.

✗ Fout
system clock 90s fast  // code is two steps ahead
✓ Correct
enable NTP / automatic time  // code aligns with server

Ongeldig Base32-secret

Base32 gebruikt alleen A–Z en 2–7. Spaties uit een afgedrukte sleutel zijn prima, maar een 0, 1 of 8 is geen geldig Base32 en kan niet worden gedecodeerd.

✗ Fout
secret: "JBSW 0NE8"  // contains 0 and 8
✓ Correct
secret: "JBSWY3DPEHPK3PXP"  // valid Base32

Veelvoorkomende toepassingen

Een 2FA-aanmeldproces debuggen
Reproduceer de exacte code die de authenticator-app van een gebruiker toont, zodat je kunt traceren waarom een tweefactoraanmelding wordt geweigerd.
Een nieuw account registreren
Genereer een vers Base32-secret en QR-code en scan deze in Google Authenticator, Authy of 1Password om 2FA in te stellen.
Het venster van je server valideren
Verifieer codes tegen een secret om te bevestigen dat je backend een net geroteerde code accepteert en een verlopen code weigert.
End-to-end-testfixtures bouwen
Bereken deterministische TOTP-codes uit een bekend secret om geautomatiseerde tests van een tweefactorauthenticatieproces aan te sturen.
Enterprise-instellingen afstemmen
Reproduceer 8-cijferige of SHA-256-codes wanneer een provider afwijkt van de standaard SHA-1 / 6 cijfers, om een afwijking te debuggen.
Snel weer toegang krijgen
Genereer de huidige code uit een geback-upt secret wanneer je telefoon niet beschikbaar is — met een wegwerpkopie van het secret.

Technische details

RFC 6238- / RFC 4226-conform
Implementeert TOTP volgens RFC 6238 bovenop het HOTP-algoritme met dynamische truncatie uit RFC 4226, met selecteerbare SHA-1, SHA-256 en SHA-512.
Native Web Crypto HMAC
Codes worden afgeleid via crypto.subtle HMAC over de big-endian tijdstappenteller. Base32-decodering en truncatie verlopen volledig in de browser.
Standaard otpauth://-URI's, geen afhankelijkheden
Installatie-URI's volgen het Key Uri Format (otpauth://totp) met parameters voor issuer, algoritme, cijfers en periode. Geen externe bibliotheken, geen netwerkverzoeken.

Aanbevolen werkwijzen

Behandel het secret als een wachtwoord
Iedereen met het Base32-secret kan elke toekomstige code genereren. Bewaar het in een secrets manager, nooit in versiebeheer, en verkies hier testsecrets.
Houd klokken gesynchroniseerd
TOTP hangt af van nauwkeurige tijd. Schakel netwerktijdsynchronisatie in op servers en apparaten zodat codes binnen het verificatievenster gelijklopen.
Blijf bij de standaardinstellingen tenzij vereist
SHA-1, 6 cijfers en een periode van 30 seconden maximaliseren de app-compatibiliteit. Schakel alleen over naar 8 cijfers of SHA-256/512 wanneer je provider dat verplicht.

Veelgestelde vragen over de TOTP-/2FA-generator

Is een online TOTP-/2FA-generator veilig om te gebruiken?
Bij deze wel — en de reden is dat er nooit iets je browser verlaat. Het Base32-secret dat je typt, de otpauth://-URI en de gegenereerde code worden allemaal lokaal berekend met de native Web Crypto API. Er zijn geen netwerkverzoeken, geen logging, geen opslag en geen analytics gekoppeld aan je invoer — je kunt dit verifiëren door de internetverbinding te verbreken en te zien dat de tool gewoon blijft werken. Dat is het tegenovergestelde van een dubieuze generator die je secret naar een server POST, waar de beheerder eindeloos je codes zou kunnen aanmaken. Een TOTP-secret is een langlevende gedeelde sleutel, dus de veiligste gewoonte blijft om wegwerp- of testsecrets te verkiezen wanneer je alleen wilt experimenteren.
Wat is TOTP en wat is een Base32-secret?
TOTP (Time-based One-Time Password, gedefinieerd in RFC 6238) is het algoritme achter de roterende 6-cijferige codes in authenticator-apps. Het combineert een gedeeld secret met de huidige tijd, opgedeeld in vaste stappen (meestal 30 seconden), via een HMAC tot een korte code die zowel je apparaat als de server onafhankelijk kunnen berekenen. Het secret is de gedeelde sleutel en het wordt vrijwel altijd geschreven in Base32 — hoofdletters A–Z en de cijfers 2–7 — omdat dat alfabet hoofdletterongevoelig is en makkelijk te typen of in een QR-code te coderen. De tekenreeks JBSWY3DPEHPK3PXP is het bekende RFC-testsecret.
Waarom verschilt de gegenereerde code van de authenticator-app op mijn telefoon?
Vier dingen moeten overeenkomen voordat twee TOTP-codes gelijk zijn. Ten eerste de klok: TOTP hangt af van de huidige tijd, dus als je computer- of telefoonklok meer dan één stap afwijkt, lopen de codes uiteen — synchroniseer je systeemklok en probeer het opnieuw. Ten tweede het algoritme: deze tool gebruikt standaard SHA-1 (wat de meeste apps gebruiken), maar als je secret voor SHA-256 of SHA-512 is uitgegeven, moet je dat hier ook selecteren. Ten derde de cijfers en de periode: 6 vs. 8 cijfers, of een venster van 30s vs. 60s, leveren totaal andere codes op. Ten vierde het secret zelf — één verkeerd getypt Base32-teken verandert elke code. Stem alle vier af en de codes komen overeen.
Wat is het verschil tussen TOTP en HOTP?
Beide komen uit dezelfde HMAC-gebaseerde familie van eenmalige wachtwoorden, maar ze verschillen in wat de code aandrijft. HOTP (RFC 4226) is tellergebaseerd: elke code is gekoppeld aan een ophogende teller, dus een code blijft geldig totdat hij gebruikt wordt en de teller doorschuift. TOTP (RFC 6238) is tijdgebaseerd: het vervangt de teller door de huidige tijd, opgedeeld in vaste stappen, zodat codes elke 30 seconden automatisch roteren. TOTP is eigenlijk gewoon HOTP met de teller ingesteld op het aantal tijdstappen sinds de Unix-epoch. Deze tool genereert TOTP, wat Google Authenticator, Authy en 1Password standaard gebruiken.
Kan ik 8-cijferige codes of SHA-256 / SHA-512 gebruiken?
Ja. Open de geavanceerde opties om het algoritme over te schakelen naar SHA-256 of SHA-512, het aantal cijfers op 8 te zetten of de periode naar 60 seconden te wijzigen. Deze knoppen bestaan omdat sommige enterprise- en banksystemen langere codes of sterkere hashes vereisen. Dat gezegd hebbende: de overgrote meerderheid van de diensten — en elke gangbare consumenten-authenticator-app — gebruikt de standaardinstellingen van SHA-1, 6 cijfers en een periode van 30 seconden, dus laat ze ongewijzigd tenzij de installatie-instructies van je provider anders aangeven. Wat je ook kiest, de otpauth://-URI die de tool genereert legt die parameters vast, zodat je app het secret correct registreert.
Hoe voeg ik dit secret toe aan Google Authenticator, Authy of 1Password?
Schakel over naar het tabblad Instellen om een secret te genereren (of te plakken) en scan vervolgens de QR-code of kopieer de otpauth://-URI. Tik in Google Authenticator of Authy op de knop Toevoegen en kies Een QR-code scannen om je camera op de QR-code op het scherm te richten, of kies Een installatiesleutel invoeren en plak het Base32-secret met de bijbehorende accountnaam en het algoritme. Bewerk in 1Password een aanmeldingsitem, voeg een veld One-Time Password toe en plak de otpauth://-URI rechtstreeks. Heb je een losse QR-afbeelding voor documentatie nodig? Gebruik onze QR-codegenerator, en voor de willekeurige secrets en herstelcodes eromheen de willekeurige-wachtwoordgenerator.

Gerelateerde tools

Alle tools bekijken →