TOTP-Codes erzeugen ohne Authenticator-App
Der sechsstellige Code, den Ihre Authenticator-App alle 30 Sekunden zeigt, entsteht aus einem gemeinsamen Geheimnis und der aktuellen Uhrzeit: Geben Sie das Geheimnis ein und erhalten Sie den gültigen Code und seine Restsekunden, oder prüfen Sie einen eingegebenen Code. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Diese Funktion berechnet aus einem TOTP-Secret den aktuell gültigen sechsstelligen Einmalcode, wie ihn Authenticator-Apps für die Zwei-Faktor-Anmeldung erzeugen. Gedacht für Entwicklerinnen und Entwickler, die eine eigene TOTP-Implementierung testen oder einen Code ohne installiertes Smartphone nachrechnen müssen.
Wie ein zeitbasierter Code entsteht
Ein TOTP-Code ist Mathematik, keine Magie: Ein gemeinsames Geheimnis und die aktuelle Zeit werden zusammen gehasht, und heraus kommt ein sechsstelliger Code. Die Zeit wird dafür in Schritte von 30 Sekunden geteilt, sodass jeder neue Schritt einen neuen Code bringt. Das Verfahren wurde 2011 in RFC 6238 festgelegt und baut auf dem älteren, zählerbasierten HOTP aus RFC 4226 auf. Ein Zähler gerät aus dem Takt, wenn ein Code erzeugt, aber nie benutzt wird; die Zeit dagegen synchronisiert sich in jedem Intervall von selbst. Deshalb nutzt praktisch jede Authenticator-App, in die Sie je einen QR-Code gescannt haben, TOTP und nicht HOTP.
Wofür Sie es nutzen und worauf Sie achten sollten
Beim Erzeugen erhalten Sie den aktuellen Code und die Sekunden, die er noch gilt. Beim Prüfen erfahren Sie, ob ein eingegebener Code passt und mit welchem Zeitschritt er übereinstimmte, denn eine kleine Abweichung zwischen Telefonuhr und Server ist normal. Typische Einsätze sind die Anmeldung nach dem Passwort, die Bestätigung, dass ein neuer QR-Code richtig gescannt wurde, die Kontowiederherstellung am Telefon mit dem Support und automatische Anmeldungen von Testkonten. Wer diese Toleranz selbst nachbaut, macht leicht Fehler, die echte Nutzer aussperren oder falsche Codes annehmen. Fehlerhaft geschriebene Geheimnisse werden sofort abgelehnt.
Wie ein TOTP-Code entsteht
Ein TOTP-Code (Time-based One-Time Password) errechnet sich aus einem geheimen Secret und der aktuellen Uhrzeit, in der Regel neu alle 30 Sekunden. Kennen Server und Gerät dasselbe Secret, erzeugen beide zur gleichen Zeit denselben Code – genau darauf beruht die Zwei-Faktor-Anmeldung, wie sie Authenticator-Apps üblicherweise umsetzen.
Secret eingeben, Code erhalten
Sie fügen das Base32-codierte Secret ein, wie es beim Einrichten einer Zwei-Faktor-Anmeldung angezeigt oder in einem QR-Code hinterlegt wird, und erhalten den aktuell gültigen Code samt der verbleibenden Sekunden bis zum nächsten Wechsel. Das eignet sich, um eine eigene TOTP-Implementierung Schritt für Schritt gegenzuprüfen.
Für Tests gedacht, nicht als Ersatz für eine echte App
Für die tägliche Anmeldung bei echten Konten bleibt eine dedizierte Authenticator-App die richtige Wahl, da sie das Secret dauerhaft und lokal auf dem Gerät verwahrt. Diese Funktion eignet sich für die Entwicklung und das Testen eigener Systeme, etwa um zu prüfen, ob die eigene Server-Implementierung den passenden Code erwartet.
Anwendungsfälle
Eine eigene Zwei-Faktor-Anmeldung testen
Lukas Fischer entwickelt eine Zwei-Faktor-Anmeldung für eine interne Anwendung und prüft mit einem Test-Secret, ob der von seinem Server erzeugte Code mit dem hier berechneten übereinstimmt, bevor er die Funktion echten Nutzern freigibt.
Einen fehlerhaften Code nachvollziehen
Eine Freiberuflerin bekommt bei der Einrichtung eines Zwei-Faktor-Logins wiederholt einen ungültigen Code gemeldet und rechnet mit dem hinterlegten Secret manuell nach, ob das Problem an einer falschen Systemzeit liegt.
Häufige Fragen
Was ist der Unterschied zwischen TOTP und einem einfachen Einmalcode per SMS?
Ein TOTP-Code wird lokal aus einem geteilten Secret und der Uhrzeit berechnet, ohne dass eine Nachricht verschickt werden muss. Ein SMS-Code wird dagegen vom Server erzeugt und übertragen.
Wird mein Secret gespeichert?
Nein. Sie geben es für jede Berechnung neu ein, und es wird zu keinem Zeitpunkt aufbewahrt.
Kann ich diese Funktion anstelle einer Authenticator-App für meine echten Konten nutzen?
Davon raten wir ab. Für die tägliche Anmeldung bei echten Konten ist eine dedizierte App die richtige Wahl. Diese Funktion dient dem Testen eigener Systeme.
Warum stimmt der berechnete Code nicht mit dem meiner App überein?
Meist liegt es an einer abweichenden Systemzeit – TOTP-Codes hängen direkt von der aktuellen Uhrzeit ab. Prüfen Sie, ob Ihr Gerät korrekt synchronisiert ist.
Muss ich mich anmelden?
Nein. Es gibt derzeit keine Konten – die Nutzung im Browser ist kostenlos und ohne Limit.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev/totp \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"secret":"JBSWY3DPEHPK3PXP"}'const res = await fetch("https://api.kit.forhosting.com/dev/totp", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"secret": "JBSWY3DPEHPK3PXP"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/totp",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"secret": "JBSWY3DPEHPK3PXP"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/totp", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"secret":"JBSWY3DPEHPK3PXP"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"secret":"JBSWY3DPEHPK3PXP"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/totp", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"secret": "JBSWY3DPEHPK3PXP"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.totp",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Kostenlos, lokal, per API automatisierbar
Die Berechnung läuft direkt in Ihrem Browser, das Secret wird nicht gespeichert oder übertragen. Für automatisierte Tests in einer Testsuite steht derselbe Aufruf über die API zur Verfügung, für $0.002 pro Anfrage; im Browser bleibt die Funktion kostenlos.
Integrationsbeispiele
Automatisierte Testsuite ohne Smartphone
Ein Entwicklerteam bei der Schneider IT-Systeme GmbH & Co. KG lässt einen automatisierten Test bei jedem Durchlauf einen gültigen TOTP-Code über die API abrufen, um die Anmeldung ohne manuelles Abtippen von einem Smartphone zu prüfen.
Technische Fragen
Was kostet die Nutzung über die API?
$0.002 pro Anfrage. Im Browser bleibt die Funktion unabhängig davon kostenlos.