Criptografia em C# (.NET): criptografia e hash
A segurança de dados é um dos principais aspectos do desenvolvimento moderno. A plataforma .NET fornece um conjunto poderoso e flexível de ferramentas para proteção criptográfica de informações no namespace System.Security.Cryptography. Neste artigo, abordaremos os principais recursos de criptografia em C# (.NET): criptografia simétrica e assimétrica, hash de senhas e criação de assinaturas digitais.
1. Criptografia simétrica (AES)
A criptografia simétrica usa a mesma chave para criptografar e descriptografar dados. O algoritmo mais comum é o AES (Advanced Encryption Standard). No .NET, ele é implementado pela classe Aes.
Exemplo de criptografia e descriptografia de uma string usando AES:
using System;using System.IO;using System.Security.Cryptography;using System.Text;
public class AesExample{ 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(); } } } } }}2. Criptografia assimétrica (RSA)
A criptografia assimétrica usa um par de chaves: uma chave pública (public key) para criptografar e uma chave privada (private key) para descriptografar. No .NET, esse mecanismo é implementado pela classe RSA. O RSA é frequentemente usado para a transmissão segura de chaves simétricas.
Exemplo de geração de chaves e criptografia usando RSA:
using System;using System.Security.Cryptography;using System.Text;
public class RsaExample{ public static void RsaEncryptDecrypt() { using (RSA rsa = RSA.Create()) { // Geração de chaves (2048 bits) RSAParameters publicKey = rsa.ExportParameters(false); // apenas chave pública RSAParameters privateKey = rsa.ExportParameters(true); // ambas as chaves
string original = "Mensagem secreta para RSA";
// Criptografia com chave pública byte[] encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(original), RSAEncryptionPadding.OaepSHA256);
// Descriptografia com chave privada byte[] decryptedData = rsa.Decrypt(encryptedData, RSAEncryptionPadding.OaepSHA256); string decrypted = Encoding.UTF8.GetString(decryptedData);
Console.WriteLine($"Original: {original}"); Console.WriteLine($"Descriptografado: {decrypted}"); } }}3. Hash de dados (SHA-256, MD5)
Hash