Criptografia e Segurança: Hashing e AES com C# Prático
Confiança Digital: Chaves RSA e Criptografia Assimétrica
Por que confiar em um cadeado digital? Imagine enviar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. uma caixa forte pelo correio: qualquer um pode vê-la, mas só o destinatário tem a chave. É assim que a criptografia assimétrica protege seus dados na internet!
🔍 Neste artigo você vai:
- Entender como RSA e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. a troca de chaves
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. funcionam na prática - Aplicar criptografia em cenários
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. reais com C# - Evitar os 3 erros mais comuns que comprometem a segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.
📚 Conteúdo
1. O Que é Criptografia Assimétrica?
2. RSA: A Matemática por Trás da Magia
4. Troca de Chaves
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. na Prática
5. Boas Práticas de Segurança
🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente.
7. Armadilhas
🧠 Memory Management Avançado: Domine Span<T> e MemoryMarshal!Transforme seu código C# usando Span<T> e MemoryMarshal para manipulação eficiente de memória, reduzindo alocações desnecessárias e elevando a performance. Comuns
O Que é Criptografia Assimétrica?🔗
Solução para um problema
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. antigo: Como duas pessoas podem se comunicar de forma segura
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. sem nunca terem trocado um segredo
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. antes?
Analogia prática:
- Chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. Pública: Cadeado que você distribui para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! qualquer um - Chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. Privada: Chave única
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. que só você tem
| Simétrica | Assimétrica | |
|---|---|---|
| Velocidade | 🚀 Rápida | 🐢 Mais lenta |
| Segurança | Requer troca segura | Não precisa de segredo |
| Casos de uso | Dados em trânsito | Autenticação, chaves |
Exemplo do dia a dia: Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. você acessa um site HTTPS, seu navegador usa a chave pública do servidor para criar um canal seguro.
RSA: A Matemática por Trás da Magia🔗
Algoritmo criado em 1977 por Rivest, Shamir e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Adleman (RSA). Funciona com:
1. Escolha dois primos grandes: p = 61, q = 53
2. Calcule n = pq = 3233
3. φ(n) = (p-1)(q-1) = 3120
4. Escolha e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. (expoente público) que seja coprimo com φ(n): e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. = 17
5. Calcule d (expoente privado) onde
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. (de
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.) mod φ(n) = 1 → d = 2753
🔢 Equação mágica:
// Criptografar: c = m^e mod n
// Descriptografar: m = c^d mod n
Implementando RSA em C#🔗
using System.Security.Cryptography;
var rsa = new RSACryptoServiceProvider(2048); // 2048-bit é o padrão atual
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
Criptografando dados:
byte[] data = Encoding.UTF8.GetBytes("Segredo ultra confidencial");
byte[] encrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256);
Decriptografando:
byte[] decrypted = rsa.Decrypt(encrypted, RSAEncryptionPadding.OaepSHA256);
string original = Encoding.UTF8.GetString(decrypted);
Troca de Chaves na Prática🔗
Problema
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes.: Como trocar chaves simétricas de forma segura
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.?
Solução com RSA:
1. Cliente gera chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. AES (simétrica)
2. Criptografa a chave AES com a chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. pública do servidor
3. Servidor decriptografa com sua chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. privada
Exemplo com ECDH (Elliptic Curve Diffie-Hellman):
var client = ECDiffieHellman.Create(ECCurve.NamedCurves.nistP256);
var server = ECDiffieHellman.Create(ECCurve.NamedCurves.nistP256);
// Troca pública de chaves
byte[] clientPublic = client.PublicKey.ExportSubjectPublicKeyInfo();
byte[] serverPublic = server.PublicKey.ExportSubjectPublicKeyInfo();
// Derivação da chave compartilhada
byte[] clientSecret = client.DeriveKeyMaterial(server.PublicKey);
byte[] serverSecret = server.DeriveKeyMaterial(client.PublicKey);
// clientSecret == serverSecret ✅
Boas Práticas de Segurança🔗
✅ Faça:
- Use padding OAEP (RSAEncryptionPadding.OaepSHA256)
- Atualize chaves periodicamente (no máximo
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. 2 anos) - Valide certificados digitalmente
❌ Evite:
- Chaves
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. menores que 2048 bits - RSA para grandes dados (use para chaves
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. simétricas) - Implementações caseiras de criptografia
Tamanhos recomendados:
| Ano | Tamanho Mínimo |
|---|---|
| 2020 | 2048 bits |
| 2024 | 3072 bits |
| 2030 | 4096 bits |
Casos de Uso no Mundo Real🔗
1. SSL/TLS:
var client = new TcpClient("example.com", 443);
using SslStream sslStream = new(client.GetStream(), false);
sslStream.AuthenticateAsClient("example.com");
2. Assinatura Digital:
byte[] data = File.ReadAllBytes("contrato.pdf");
byte[] signature = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
3. Mensagens Criptografadas:
var aes = Aes.Create();
aes.GenerateKey();
// Encriptar chave AES com RSA
byte[] encryptedKey = rsa.Encrypt(aes.Key, RSAEncryptionPadding.OaepSHA256);
Armadilhas Comuns🔗
- Erro
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades.: Armazenar chaves
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. privadas em código - Solução: Use Azure Key Vault
🗝️ Azure Key Vault: Gerencie Segredos como um Especialista!Aprenda a proteger e gerenciar segredos, chaves e certificados com o Azure Key Vault em aplicações .NET, seguindo as melhores práticas de segurança na nuvem. ou Hardware Security Modules (HSM)
2. Determinismo:
- Erro
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades.: Mesma mensagem → Mesmo ciphertext - Solução: Sempre use IV (Initialization Vector) em modos CBC
- Erro
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades.: Ignorar validação
Como Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. SSL em ambientes de produção - Solução: Implemente callback
Do Callback ao Async/Await: Evolução das Chamadas Assíncronas no .NETDescubra a evolução das operações assíncronas no .NET e como o async/await superou os desafios dos callbacks antigos, simplificando o código. personalizado com verificações rigorosas
❓ FAQ Rápido
Q: Posso usar RSA para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! encriptar um arquivo de 1GB?
R: Não! RSA é lento para grandes dados. Use para encriptar a chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. AES que protege o arquivo.
Q: Como gerar números primos grandes com segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.?
R: Use RNGCryptoServiceProvider para geração segura
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. de números aleatórios.
Q: O que é melhor: RSA ou ECC?
R: ECC (Curvas Elípticas) oferece segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. equivalente com chaves menores, mas RSA é mais compatível.
🚀 Conclusão
Dominar a criptografia assimétrica é como ter um cofre digital indestrutível! Pratique com os exemplos, evite as armadilhas
🧠 Memory Management Avançado: Domine Span<T> e MemoryMarshal!Transforme seu código C# usando Span<T> e MemoryMarshal para manipulação eficiente de memória, reduzindo alocações desnecessárias e elevando a performance. e lembre-se: a segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. nunca é exagero.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- ASP.NET Core Samples: github.com/dotnet/AspNetCore.Docs
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás