Generador de claves API
Genera claves API aleatorias en base62, hexadecimal o base64url, con prefijo opcional y el hash SHA-256 para guardar en tu servidor.
Cómo utilizar
Elige un formato y una seguridad, añade un prefijo si lo quieres y «Generar» crea la clave con crypto.getRandomValues(), el generador aleatorio criptográfico del navegador. «Copiar», junto a cada clave, copia esa clave; «Copiar todas» pone todas en el portapapeles, una por línea. Hasta 20 claves a la vez, cada una obtenida de forma independiente.
La seguridad es el número de bits aleatorios, y la longitud depende del alfabeto. Con 256 bits, una clave hexadecimal tiene 64 caracteres, mientras que base62 (a–z, A–Z, 0–9) y base64url (que añade - y _) necesitan 43. Cada carácter base62 sale de un byte aleatorio, y los bytes de 248 en adelante se descartan, así que los 62 caracteres son exactamente igual de probables; la línea sobre las claves muestra el número real de bits.
Un prefijo como sk_live_ se escribe tal cual delante de la parte aleatoria. No es secreto ni añade seguridad, pero dice a una persona para qué sirve la clave y permite que los escáneres de secretos detecten una clave filtrada en el código: las claves de Stripe empiezan por sk_, pk_ o rk_ seguidas de test_ o live_, y los tokens de GitHub por ghp_, gho_ y similares. El guion bajo, además, hace que un doble clic seleccione la clave entera.
Con la opción SHA-256, cada clave viene con su hash, calculado sobre la clave completa, prefijo incluido. Guarda en el servidor solo ese hash: cuando llegue una petición, calcula el hash de la clave que trae y compáralo. Como la clave es larga y aleatoria, aquí basta un hash rápido, a diferencia de las contraseñas, que necesitan uno lento. No se envía nada: las claves solo existen en esta página hasta que las copias.
Ejemplo
Genera una clave base62 de 256 bits con el prefijo sk_test_. Cada vez sale una clave distinta.
256 bits en base6243 letras y números: 43 × 5,95 bits ≈ 256 bits.256 bits en hexadecimal64 caracteres de 0–9 y a–f: 4 bits cada uno.128 bits en base64url22 caracteres, 132 bits: base64url solo puede redondear hacia arriba a caracteres enteros de 6 bits.Prefijo sk_test_sk_test_ seguido de la parte aleatoria; el prefijo añade 8 caracteres y ninguna seguridad.
Preguntas frecuentes
¿Cuántos bits necesita una clave API?
128 bits aleatorios ya están muy lejos de poder adivinarse: incluso con mil millones de intentos por segundo, recorrer una fracción apreciable llevaría más que la edad del universo. Aquí se usan 256 bits por defecto porque una clave más larga solo cuesta unos caracteres más. GitHub pasó sus tokens a 178 bits en 2021.
¿Qué formato elijo?
Base62 es el más cómodo de copiar: no tiene símbolos que una URL, una terminal o un archivo de configuración puedan tratar de forma especial. El hexadecimal es más largo, pero funciona donde solo se aceptan 0–9 y a–f. base64url es el más corto y es seguro en URLs, pero el - puede cortar la selección con doble clic y algunos validadores lo rechazan.
¿Por qué guardar solo el hash?
Si la base de datos se filtra, los hashes no sirven para llamar a tu API y de ellos no se pueden sacar las claves. Es la misma idea que con las contraseñas; la diferencia es que una clave aleatoria de 256 bits no se puede adivinar, así que SHA-256 basta y no hace falta un hash lento como Argon2.
¿Sirve un UUID como clave API?
Un UUID versión 4 tiene solo 122 bits aleatorios y una forma fija y reconocible, y se diseñó como identificador, no como secreto. Para claves que dan acceso, usa una clave aleatoria dedicada como estas, con prefijo si quieres que se reconozca.
¿Cuándo necesito 384 o 512 bits?
Para secretos que firman JSON Web Tokens con HMAC. El RFC 7518 exige una clave al menos tan larga como la salida del hash: 256 bits para HS256, 384 para HS384 y 512 para HS512. Para una clave API normal, 256 bits ya es más que suficiente.