Ventana TOTP: segundos restantes e índice
En el instante Unix 1700000000 con un periodo de 30 segundos, está en la ventana 56666666 y quedan 10 segundos para que el contador avance. Indique periodo y marca de tiempo para revisar códigos que parecen caducar antes, sin usar ningún secreto. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Período
- 30
- Hora actual
- 1 700 000 000
- Segundos restantes
- 10
- Índice de la ventana
- 56 666 666
Esta calculadora de ventanas de tiempo TOTP convierte la duración de un período y una marca de tiempo Unix en dos valores prácticos: el índice de la ventana activa y la cantidad de segundos completos que faltan para que comience la siguiente. Resulta útil para crear, probar o diagnosticar sistemas de contraseñas de un solo uso basadas en tiempo, sobre todo cuando un código parece caducar antes de lo previsto. El cálculo es determinista, no utiliza claves secretas, no genera contraseñas ni consulta el reloj del dispositivo, por lo que una misma entrada siempre produce el mismo resultado.
Comprenda qué representa una ventana de tiempo TOTP
Un sistema TOTP divide el tiempo Unix en ventanas consecutivas de igual duración. Treinta segundos es un período habitual, pero el cálculo funciona con cualquier número entero positivo de segundos. El índice de la ventana se obtiene al dividir la marca de tiempo Unix por el período y redondear hacia abajo.
Todas las marcas que producen el mismo cociente pertenecen a la misma ventana, de modo que un autenticador y un servidor pueden seleccionar de forma independiente el mismo contador variable. Esta calculadora muestra directamente ese contador sin solicitar un secreto compartido ni generar un código de autenticación. También indica cuántos segundos completos faltan para que avance el contador.
En el primer segundo exacto de una ventana queda el período completo; en el último, queda un segundo. Esta convención de límites permite crear cuentas regresivas útiles y evita mostrar cero mientras la ventana actual todavía está activa.
Elija las entradas e interprete el resultado
Establezca period como la duración configurada de un paso TOTP, expresada mediante un entero positivo de segundos. El índice comienza en cero desde la época Unix y normalmente es un entero grande para las marcas actuales. No es un código y no debe compararse con los dígitos que muestra un autenticador.
En su lugar, compare los índices de ventana para comprobar si dos componentes coinciden respecto del tiempo, o utilice el valor restante para decidir cuándo una prueba debe esperar al siguiente límite. La función no aplica tolerancia al desfase del reloj, aceptación de ventanas adyacentes, correcciones de segundos intercalares ni demoras de red. Esas son decisiones de política del verificador.
El resultado describe únicamente la ventana activa en términos matemáticos para la marca y el período proporcionados, lo que mantiene previsibles las pruebas automatizadas y facilita aislar las discrepancias.
Utilice la calculadora de forma segura en pruebas y operaciones
Utilice esta capacidad cuando necesite información temporal sin exponer una semilla TOTP. En las pruebas de integración, las marcas fijas permiten verificar el comportamiento justo antes, durante y después de un límite sin simular un reloj oculto dentro de esta calculadora. Recuerde que una ventana coincidente no demuestra que una contraseña de un solo uso enviada sea válida.
La verificación aún requiere el secreto compartido, los ajustes acordados de hash y cantidad de dígitos, protección contra repeticiones y una política explícita de tolerancia. Evite registrar secretos junto con estos diagnósticos temporales; el período, la marca, el índice y la cuenta regresiva bastan para investigar la mayoría de los problemas de sincronización.
Qué puede hacer con ella
Diagnosticar la alineación del reloj del autenticador
Compare los índices calculados para las marcas registradas del cliente y del servidor a fin de detectar un desfase de reloj o período sin compartir una semilla TOTP.
Crear una cuenta regresiva para el cambio
Muestre cuántos segundos completos quedan antes de que avance el contador TOTP activo y el código recién generado pase a la siguiente ventana.
Probar límites exactos de ventanas
Utilice marcas de tiempo Unix fijas justo antes y durante un límite para que las pruebas temporales de autenticación sean deterministas y repetibles.
Preguntas frecuentes
¿Cuánto cuesta esta capacidad?
La versión del navegador puede realizar localmente el mismo cálculo determinista.
¿Genera o verifica un código TOTP?
No. Solo calcula metadatos temporales y nunca acepta un secreto compartido ni una contraseña de un solo uso.
¿Por qué se devuelve el período completo en un límite exacto?
La nueva ventana acaba de comenzar, por lo que no ha transcurrido ninguno de sus segundos completos y queda todo el período.
¿Escribo el tiempo en segundos o en milisegundos?
En segundos Unix enteros, nunca en milisegundos. Un valor en milisegundos apuntaría a una ventana muy lejana en el futuro. Usar una marca de tiempo explícita también le permite repetir el resultado en pruebas, registros o informes de incidentes.
¿Es válido el código si dos sistemas comparten la misma ventana?
No necesariamente. Que coincida la ventana solo muestra que ambos lados están de acuerdo en la hora. Para validar un código hacen falta además el secreto compartido, los ajustes acordados, protección contra reutilización y una tolerancia clara al desfase del reloj.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/security/otp-time-window-calc \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"period":30,"current_time":1700000000}'const res = await fetch("https://api.kit.forhosting.com/security/otp-time-window-calc", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"period": 30,
"current_time": 1700000000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/security/otp-time-window-calc",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"period": 30,
"current_time": 1700000000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/security/otp-time-window-calc", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"period":30,"current_time":1700000000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"period":30,"current_time":1700000000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/security/otp-time-window-calc", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"period": 30,
"current_time": 1700000000
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "security.otp_time_window_calc",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Comprenda qué representa una ventana de tiempo TOTP
Introduzca expresamente la marca como segundos Unix, no milisegundos, para poder reproducir el resultado en registros, pruebas y notas de incidentes sin depender del reloj del navegador ni del ejecutor de la API.
Elija las entradas e interprete el resultado
Después, proporcione current_time como una marca de tiempo Unix no negativa en segundos completos. La respuesta contiene seconds_remaining y window_index. Por ejemplo, si han transcurrido diez segundos dentro de la ventana actual de un período de treinta segundos, seconds_remaining vale veinte.
Utilice la calculadora de forma segura en pruebas y operaciones
Una tarea de supervisión puede calcular el índice actual a partir de una marca registrada, mientras que una interfaz puede usar seconds_remaining para advertir que un código está próximo a cambiar. Cada llamada a la API cuesta $0.002, mientras que la versión del navegador puede ejecutarse localmente. Como el algoritmo realiza aritmética de tiempo constante y no accede a la red, a fuentes aleatorias ni al reloj, las llamadas repetidas con entradas idénticas devuelven el mismo JSON y son aptas para pruebas de referencia y registros de auditoría.
Preguntas técnicas
¿current_time debe estar en segundos o milisegundos?
Utilice segundos Unix completos. Convierta una marca en milisegundos a segundos antes de enviarla.
¿Qué ocurre si el período es cero o negativo?
La solicitud falla con un error invalid_input porque una ventana de tiempo TOTP debe tener una duración positiva.