◈ ProjView
← todos os projetos

pwned-check

Python Defensiva GitHub ↗

Verificador de vazamento de senhas via k-anonymity (HIBP range API, só 5 chars do SHA-1 saem).

9 testes · 9 passou · 0 falhou · 0 skip

Entrypoints (CLI)

Módulos e funções principais

src/pwned_check/checker.py
  • sha1_hex() — Retorna o SHA-1 da senha em maiúsculas hexadecimais.
  • split_hash() — Divide o hash em (prefixo, sufixo) segundo o comprimento do prefixo.
  • match_suffix_count() — Procura o sufixo na resposta do range HIBP e devolve a contagem.
src/pwned_check/cli.py
  • build_parser()
  • build_result_message() — Monta a mensagem de saída com base na contagem de vazamentos.
  • main()
src/pwned_check/hibp.py
  • query_hibp() — Consulta a API de range da HIBP enviando apenas o prefixo de 5 chars.
  • check_password_online() — Calcula hash, envia só o prefixo e retorna quantas vezes vazou.
  • load_local_hashes() — Carrega um arquivo de hashes SHA-1 (um por linha, maiúsculas).
  • check_password_offline() — Verifica a senha contra um conjunto local de hashes SHA-1.

Estrutura de arquivos

README

# pwned-check Verificador defensivo de vazamento de senhas baseado em **k-anonymity** (modelo do [Have I Been Pwned](https://haveibeenpwned.com/)). A senha **nunca** sai da sua máquina: apenas os 5 primeiros caracteres do SHA-1 são enviados à API. ## Aviso ético Ferramenta **educacional e defensiva**. Use apenas para verificar suas próprias senhas ou em contextos com autorização. Não a utilize para perseguir, expor ou atacar terceiros. O autor não se responsabiliza por uso indevido. ## Instalação ```bash pip install -e . ``` Requer Python 3.10+ (apenas biblioteca padrão; nenhuma dependência externa). ## Uso ### Online (HIBP range API) ```bash pwned-check "minhaSenha123" ``` ### Offline (arquivo local de hashes) ```bash pwned-check --file hashes.txt "minhaSenha123" ``` No modo offline, o arquivo deve conter um hash SHA-1 (maiúsculas) por linha. ## Como funciona 1. Calcula `SHA-1` da senha (em maiúsculas hexadecimais). 2. Envia **só os 5 primeiros caracteres** (prefixo) à API pública da HIBP. 3. Confere o sufixo na lista de respostas retornadas (k-anonymity). Como a API só recebe o prefixo, ela não sabe qual senha você está testando. ## Testes ```bash pip install pytest pytest tests/ ``` ## Licença MIT — Copyright (c) 2026 Diogo Damasceno. Veja `LICENSE`.
pwned-check SIM NÃO SIM NÃO Receber senha SHA-1 da senha Enviar só 5 primeiros hex (k-anonymity) Prefixo aparece na HIBP? Buscar suffix no range retornado Hash completo confere? Reportar quantas vezes vazou Senha comprometida / segura

Como rodar na prática (entrada → saída):

$ pwned-check 's3nh4fraca'
Vazada 381 vezes\nSenha NAO e segura