🚀 Capítulo 14: Criptografia de Senhas (Tema: Sherlock Holmes)
NOTE
Este capítulo utiliza a temática de Sherlock Holmes para explicar a Criptografia. O Professor Moriarty não pode descobrir as senhas dos nossos clientes; precisamos cifrá-las!
1. 🎯 Objetivo da Aula
Compreender a importância de não armazenar senhas em texto aberto e como utilizar algoritmos de Hashing para protegê-las.
2. 🏢 O Cenário Prático (Seu Desafio)
O Professor Moriarty está tentando roubar o banco de dados de usuários do seu sistema. Se guardarmos as senhas exatamente como os usuários digitaram (ex: batman123), Moriarty poderá ler e usar todas as contas.
Seu desafio, junto com Sherlock Holmes, é criar uma “cifra” que transforme a senha em um código impossível de ser lido por humanos, mas que o computador ainda consiga validar!
3. 🧠 Fundamentos: A Teoria Traduzida
NUNCA guarde senhas em texto limpo (Plain Text) no banco de dados. Se o banco vazar, todos os usuários estarão expostos. Em vez disso, usamos uma técnica chamada Hashing.
🔐 1. O que é Hashing?
É uma função matemática que pega um texto de qualquer tamanho e o transforma em uma sequência de caracteres de tamanho fixo (o Hash).
- Característica Principal: É uma via de mão única. Você consegue transformar a senha em Hash, mas NÃO CONSEGUE transformar o Hash de volta na senha original.
🧂 2. O que é Salt (Sal)?
Para evitar que hackers usem tabelas de senhas prontas (Rainbow Tables), adicionamos um texto aleatório (Sal) à senha antes de gerar o Hash. Isso garante que mesmo que dois usuários tenham a mesma senha (123456), os hashes deles no banco serão diferentes!
⚙️ Algoritmo Recomendado: BCrypt
É um dos algoritmos mais seguros e lentos (o que é bom contra ataques de força bruta) para gerar hashes de senhas.
4. 📖 Exemplo Guiado: O Fluxo de Cadastro
- Usuário digita a senha:
elementar. - O sistema gera um Sal aleatório:
x89#. - O sistema junta tudo e gera o Hash:
$2b$10$N9qo8uLO... - O sistema salva apenas o Hash e o Sal no banco.
Quando o usuário tenta fazer login, o sistema repete o processo e compara se o Hash gerado é igual ao que está no banco!
5. 🛠️ Prática Obrigatória 1: Criptografia vs Hashing
Qual é a principal diferença entre Criptografia (que usamos para enviar mensagens secretas) e Hashing (que usamos para guardar senhas)? (Dica: Pense na via de mão dupla vs mão única).
6. 🛠️ Prática Obrigatória 2: O Perigo do Vazamento
Se o banco de dados vazar e o hacker tiver acesso apenas aos Hashes das senhas, por que ele ainda não consegue fazer login direto no sistema usando esses Hashes?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 14 Backend) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_07_backend_e_apis/
├── capitulos/
│ ├── capitulo_14_criptografia.md
│ └── codigos/
│ └── cap14/
│ └── diferenca_hashes.txt9. 💡 Checkpoint de Lógica
Se não conseguimos reverter o Hash para descobrir a senha, como o sistema sabe que o usuário digitou a senha certa na hora do login?
10. 🔥 Desafio de Fixação
Pesquise o que são as Rainbow Tables e como elas são usadas por hackers para quebrar senhas fracas.
🔑 Gabarito de Código/Fórmulas
Gabarito do Checkpoint: O sistema pega a senha que o usuário digitou no login, aplica a mesma função de Hash (com o mesmo Sal) e compara o resultado com o Hash que está guardado no banco. Se forem idênticos, a senha está certa!