Generador TOTP: generador de códigos 2FA y creador de QR otpauth
Convierte un secreto Base32 en códigos 2FA en vivo con cuenta atrás, crea un código QR otpauth:// para apps de autenticación o lee una URI existente.
Los códigos dependen del reloj de tu dispositivo. Si los rechazan, comprueba que la hora se ajuste automáticamente; la mayoría de los servidores también aceptan el código anterior y el siguiente.
URI otpauth:// y código QR
otpauth://totp/Example%20Inc:jane%40example.com?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example%20Inc&algorithm=SHA1&digits=6&period=30
Escanéalo con Google Authenticator, Microsoft Authenticator, 1Password, Authy o cualquier app TOTP. Muchas apps ignoran SHA-256/512 y los 8 dígitos; mantén los valores predeterminados salvo que controles ambos lados.
Leer una URI otpauth://
Los secretos y los códigos se quedan en tu navegador. No se envía ni se guarda nada. Trata un secreto TOTP como una contraseña: quien lo tenga puede generar tus códigos. Ver todas las herramientas gratis.
¿Encontraste un problema o algo que podría mejorar? Leemos todos los mensajes y lo arreglamos rápido.
Este generador TOTP produce los mismos códigos de un solo uso basados en el tiempo que Google Authenticator, Microsoft Authenticator, 1Password y otras apps de autenticación. Introduce un secreto Base32 y el código actual de 6 u 8 dígitos aparecerá con una cuenta atrás, junto con los códigos anterior y siguiente. Está pensado para desarrolladores que añaden autenticación en dos pasos a una aplicación: genera un secreto, crea la URI otpauth:// y el código QR que escanearán tus usuarios, y comprueba que tu servidor acepta los códigos que debe.
Los códigos se calculan en tu navegador con la función HMAC de WebCrypto, siguiendo la RFC 6238 (TOTP) y la RFC 4226 (HOTP), y la implementación está probada con los vectores de prueba oficiales de ambas RFC. No se envía nada a ninguna parte. Aun así, un secreto TOTP es tan sensible como una contraseña: quien lo tenga puede generar códigos válidos. Úsalo para cuentas de prueba y trabajos de integración, no como sustituto de una app de autenticación en tus cuentas reales.
Cómo usarla
- Pega un secreto Base32 o pulsa Nuevo secreto aleatorio. Los espacios y las minúsculas no son problema.
- Deja el algoritmo, los dígitos y el periodo en SHA-1, 6 y 30 segundos, a menos que tu servidor use otra cosa.
- Lee el código actual; el anillo muestra cuántos segundos sigue siendo válido. Cópialo con el botón.
- Rellena el emisor y el nombre de la cuenta para crear la URI otpauth:// y escanea el código QR con una app de autenticación para confirmar que las dos muestran el mismo código.
- Para inspeccionar una configuración existente, pega su URI otpauth:// en el lector y pulsa Cargar.
Preguntas frecuentes
¿Cómo funciona un código TOTP?
Tu servidor y tu app de autenticación comparten una clave secreta. Cada 30 segundos, los dos calculan el HMAC-SHA1 de la clave y del número de intervalos de 30 segundos transcurridos desde el 1 de enero de 1970, y reducen el resultado a 6 dígitos. Como los dos lados usan el mismo secreto y el mismo reloj, obtienen el mismo código sin comunicarse. Eso es la RFC 6238; el algoritmo subyacente basado en contador es HOTP, la RFC 4226.
¿Por qué no funciona mi código TOTP?
La causa más habitual, con diferencia, es un reloj desajustado. Una diferencia de más de unos 30 segundos sitúa el dispositivo en otro intervalo de tiempo; configura el dispositivo y el servidor para que sincronicen la hora automáticamente. Otras causas: el secreto se escribió mal (Base32 solo usa A–Z y 2–7, así que nunca aparecen O, I, 0, 1 ni 8) o el servidor espera otros ajustes, como 8 dígitos, SHA-256 o un periodo de 60 segundos.
¿Es inseguro SHA-1 en TOTP?
No. Las debilidades conocidas de SHA-1 son ataques de colisión, que permiten crear dos entradas con el mismo hash. TOTP usa SHA-1 dentro de HMAC con una clave secreta, una construcción que no depende de la resistencia a colisiones y sigue siendo segura. SHA-1 sigue siendo el valor por defecto porque es lo que admite casi cualquier app de autenticación.
¿Qué es una URI otpauth://?
Es el texto que hay dentro del código QR de configuración de 2FA, en el Key Uri Format que definió originalmente Google Authenticator: otpauth://totp/Issuer:account?secret=BASE32SECRET&issuer=Issuer, opcionalmente con los parámetros algorithm, digits y period. Escanear el código QR simplemente pasa esta cadena a la app. Cualquiera que vea el código QR o la URI tiene el secreto, así que trata las pantallas de configuración como información sensible.
¿Qué longitud debe tener un secreto TOTP?
La RFC 4226 exige al menos 128 bits y recomienda 160 bits, que son 32 caracteres Base32. El botón Nuevo secreto aleatorio genera 160 bits con crypto.getRandomValues. Muchos servicios antiguos emiten secretos de 80 bits (16 caracteres); funcionan, y esta herramienta avisará de ellos, pero los sistemas nuevos deberían usar al menos 160 bits.
¿Todas las apps de autenticación admiten 8 dígitos y SHA-256?
No. El formato otpauth permite SHA256, SHA512, 8 dígitos y otros periodos, pero algunas apps ignoran esos parámetros y siempre generan códigos SHA-1 de 6 dígitos y 30 segundos, que entonces no coinciden. Si controlas el servidor, los valores por defecto son la opción segura. Escanea el código QR de esta página con las apps que probablemente usen tus usuarios y compara los códigos antes de lanzar un ajuste que no sea el predeterminado.
Cómo añadir TOTP a tu propia aplicación
• Genera en el servidor un secreto aleatorio de al menos 160 bits por usuario y guárdalo cifrado, no como hash: el servidor necesita el original para calcular los códigos.
• Muestra la URI otpauth:// como código QR, y el secreto Base32 como texto para los usuarios que no puedan escanearlo.
• Pide al usuario que introduzca un código válido antes de activar la 2FA, para que un escaneo fallido no lo deje fuera de su cuenta.
• Al verificar, acepta el código actual y normalmente un intervalo a cada lado (los códigos anterior y siguiente que se muestran aquí) para absorber el desfase del reloj, y rechaza un código que ya se haya usado en esa ventana para evitar la reutilización.
• Limita los intentos. Un código de 6 dígitos solo tiene un millón de posibilidades, así que los intentos ilimitados lo derrotan.
• Entrega códigos de recuperación de un solo uso al darse de alta, y guárdalos como hash, igual que las contraseñas.
TOTP frente a códigos SMS, notificaciones push y passkeys
TOTP es mucho más robusto que los códigos por SMS, que se pueden interceptar con ataques de SIM swapping y debilidades de SS7, y funciona sin conexión y sin número de teléfono. Su punto débil es el phishing: una página de inicio de sesión falsa convincente puede pedir el código y reenviarlo al sitio real dentro de la ventana de 30 segundos.
Las aprobaciones por notificación push son cómodas, pero se prestan a ataques de “fatiga de MFA”, en los que un atacante envía solicitudes hasta que el usuario pulsa aprobar. Las passkeys y las llaves de seguridad físicas (FIDO2/WebAuthn) son los únicos métodos habituales que resisten el phishing por diseño, porque el navegador vincula la credencial al dominio del sitio real. Un enfoque sensato es ofrecer primero passkeys y mantener TOTP como alternativa compatible con casi todo.
Herramientas gratis relacionadas
- Generador de contraseñas — Genera una contraseña aleatoria segura, una frase de contraseña fácil de recordar o un PIN. Funciona por completo en tu navegador: no se envía ni se guarda nada.
- Generador de códigos QR — Crea un código QR para una URL, texto, email, teléfono, SMS, Wi-Fi o tarjeta de contacto, con tus colores, y descárgalo en PNG o SVG. Los códigos no caducan nunca.
- Generador de bcrypt — Genera el hash bcrypt de una contraseña con el coste que elijas, comprueba una contraseña con un hash bcrypt y descubre qué significa cada parte del hash.
- Generador de hash — Calcula el hash de textos o archivos con MD5, SHA-1, SHA-256, SHA-384, SHA-512 y CRC32, verifica una suma de comprobación o calcula un HMAC. Los archivos nunca salen de tu dispositivo.