Criptografia em C# (.NET): criptografia e hash de dados
Aplicações modernas na plataforma .NET quase sempre exigem proteção de dados. A biblioteca System.Security.Cryptography fornece um conjunto completo de ferramentas para implementar operações criptográficas: desde criptografia simétrica e assimétrica até hash e geração de assinaturas digitais. Neste artigo, vamos explorar os principais algoritmos disponíveis em C# e mostrar exemplos de seu uso.
1. Principais classes de criptografia no .NET
Todas as classes criptográficas estão no namespace System.Security.Cryptography. As principais categorias são:
- Criptografia simétrica — uma chave para criptografar e descriptografar (Aes, DES, TripleDES).
- Criptografia assimétrica — um par de chaves: pública e privada (RSA, ECDiffieHellman).
- Hash — transformação unidirecional de dados (SHA256, SHA512, MD5).
- Geração de números aleatórios — gerador criptograficamente seguro (RandomNumberGenerator).
2. Criptografia simétrica com exemplo AES
O algoritmo AES (Advanced Encryption Standard) é a cifra simétrica mais comum. Para usá-lo no .NET, utiliza-se a classe Aes.
Exemplo de criptografia e descriptografia de string:
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 aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.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 aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.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(); } } } } }}Uso:
byte[] key = RandomNumberGenerator.GetBytes(32); // Chave de 256 bitsbyte[] iv = RandomNumberGenerator.GetBytes(16); // IV de 128 bits
string original = "Dados secretos";byte[] encrypted = AesExample.EncryptStringToBytes_Aes(original, key, iv);string decrypted = AesExample.DecryptStringFromBytes_Aes(encrypted, key, iv);
Console.WriteLine($"Original: {original}");Console.WriteLine($"Descriptografado: {decrypted}");3. Criptografia assimétrica com RSA
RSA é usado para transferência segura de chaves ou pequenos volumes de dados. No .NET, é implementado pela classe RSA.
Exemplo de geração de chaves e criptografia:
using System;using System.Security.Cryptography;using System.Text;
public class RsaExample{ public static void Demonstrate Também na biblioteca
Trabalhando com CSV em Rust: biblioteca csv e processamento de dados
Validação de dados em Kotlin: bibliotecas e abordagens
Registro em Kotlin: visão geral das melhores bibliotecas e soluções
Trabalhando com arquivos ZIP em Node.js: bibliotecas archiver e adm-zip