Criptografia em C# (.NET): criptografia e hash

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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[]

Recommendations