Contraseñas

Comprobar si una contraseña está filtrada sin enviarla: API de Pwned Passwords con curl

Publicado el 2 de noviembre de 2026Última revisión: 2 de noviembre de 20263 min de lectura

Resultado de la prueba

123456 aparece 210461208 veces, maria2020 aparece 56429 veces y una clave aleatoria de 19 caracteres aparece 0 veces; en los tres casos solo salieron 5 caracteres de la huella.

Contenido

Este artículo no lleva enlaces de afiliado.

Pwned Passwords es una lista pública de contraseñas que han aparecido en filtraciones. Tiene una API gratuita y sin clave que permite comprobar una contraseña sin enviar ni la contraseña ni su huella completa. Esta prueba lo hace desde la terminal.

Qué se probó

Prueba del 2026-11-02 con curl 8.5.0 y sha1sum de GNU coreutils 9.4, contra https://api.pwnedpasswords.com/range/. Se comprobaron tres contraseñas de ejemplo, ninguna de ellas real. No se probó la API de correos filtrados, que requiere clave de pago.

Cómo funciona

  1. Se calcula la huella SHA-1 de la contraseña, en mayúsculas.
  2. Se envían a la API solo los 5 primeros caracteres de la huella.
  3. La API devuelve todas las terminaciones de huellas que empiezan por esos 5 caracteres, cada una con el número de veces que aparece (formato TERMINACION:NUMERO).
  4. La comparación se hace en tu máquina: si la terminación de tu huella está en la lista, la contraseña está filtrada.

Con el prefijo 7C4A8, la API devolvió 1920 terminaciones en el momento de la prueba. El servidor no puede saber cuál de esas 1920 es la tuya.

El script

#!/bin/bash
# uso: pwn 'contraseña'
h=$(printf %s "$1" | sha1sum | cut -c1-40 | tr a-f A-F)
echo "enviado: ${h:0:5}"
n=$(curl -sf https://api.pwnedpasswords.com/range/${h:0:5} | grep "^${h:5}" | cut -d: -f2 | tr -d '\r')
echo "filtrada ${n:-0} veces"

printf %s evita que el salto de línea de echo cambie la huella. curl -sf hace que un fallo HTTP no se confunda con "0 veces" (con -s solo, una petición fallida acabaría en filtrada 0 veces; el script sigue sin comprobar el código de salida, así que ante un error conviene repetir la consulta). En mi prueba las líneas de la respuesta terminaban en CRLF; tr -d '\r' quita ese retorno de carro por si acaso.

Resultados

Contraseña Enviado Veces filtrada
123456 7C4A8 210461208
maria2020 969F4 56429
k7Qz-r9Lw-x2Vm-p4Ta 23494 0

Un nombre con un año aparece decenas de miles de veces. La clave larga y aleatoria no aparece. Que no aparezca no prueba que sea segura, solo que no está en esa lista.

Privacidad de la consulta

Si sale filtrada

Si una contraseña sale filtrada aunque sea una sola vez, cámbiala en todos los sitios donde la uses.