Criptografia em C# (.NET): criptografia e hash
A segurança de dados é uma das principais tarefas do desenvolvimento moderno. A plataforma .NET fornece um conjunto poderoso e flexível de ferramentas para proteção criptográfica no namespace System.Security.Cryptography. Neste artigo, abordaremos detalhadamente os principais recursos de criptografia em C#: criptografia simétrica e assimétrica, além de hash de dados. O material será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos.
1. Principais namespaces e classes
Toda a funcionalidade criptográfica está concentrada no assembly System.Security.Cryptography. Classes principais:
Aes,DES,TripleDES— algoritmos simétricos;RSA,ECDsa,ECDiffieHellman— algoritmos assimétricos;SHA256,SHA512,MD5— algoritmos de hash;RandomNumberGenerator— gerador criptograficamente seguro de números aleatórios.
Importante: use apenas algoritmos modernos. MD5 e SHA1 são considerados obsoletos e inseguros para fins criptográficos.
2. Criptografia simétrica (AES)
A criptografia simétrica usa a mesma chave para criptografar e descriptografar. O algoritmo mais popular é o AES (Advanced Encryption Standard). Vejamos um exemplo de criptografia de string.
using System;using System.IO;using System.Security.Cryptography;using System.Text;
public class AesEncryption{ public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv) { using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } return msEncrypt.ToArray(); } } } }
public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] key, byte[] iv) { using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } }}Para gerar uma chave segura e um vetor de inicialização (IV), use RandomNumberGenerator:
using System.Security.Cryptography;
byte[] key = new byte[32]; // 256 bitsbyte[] iv = new byte[16]; // 128 bitsusing (RandomNumberGenerator rng = RandomNumberGenerator.Create()){ rng.GetBytes(key); rng.GetBytes(iv);}3. Criptografia assimétrica (RSA)
A criptografia assimétrica usa um par de chaves: pública (public) e privada (private). RSA é um algoritmo clássico, adequado para criptografar pequenos volumes de dados (geralmente até 190 bytes para uma chave de 2048 bits). Exemplo:
using System;using System.Security.Cryptography;using System.Text;
public class RsaEncryption{ public static (byte[] Também na biblioteca
Programação Reativa em JavaScript (Node.js): RxJS & Observables
Testes em Swift (iOS/macOS): frameworks e ferramentas
Trabalhando com Markdown em Node.js: bibliotecas e ferramentas para conversão
Envio de SMS em Kotlin: Biblioteca de API smslib4k