Criptografía en C# (.NET): cifrado y hash
La seguridad de los datos es uno de los aspectos clave del desarrollo moderno. La plataforma .NET proporciona un conjunto potente y flexible de herramientas para la protección criptográfica de la información en el espacio de nombres System.Security.Cryptography. En este artículo, exploraremos las principales capacidades de criptografía en C# (.NET): cifrado simétrico y asimétrico, hash de contraseñas y creación de firmas digitales.
1. Cifrado simétrico (AES)
El cifrado simétrico utiliza la misma clave para cifrar y descifrar datos. El algoritmo más común es AES (Advanced Encryption Standard). En .NET está implementado por la clase Aes.
Ejemplo de cifrado y descifrado de una cadena con 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. Cifrado asimétrico (RSA)
El cifrado asimétrico utiliza un par de claves: una clave pública (public key) para cifrar y una clave privada (private key) para descifrar. En .NET, este mecanismo está implementado por la clase RSA. RSA se usa a menudo para la transmisión segura de claves simétricas.
Ejemplo de generación de claves y cifrado con RSA:
using System;using System.Security.Cryptography;using System.Text;
public class RsaExample{ public static void RsaEncryptDecrypt() { using (RSA rsa = RSA.Create()) { // Generación de claves (2048 bits) RSAParameters publicKey = rsa.ExportParameters(false); // solo clave pública RSAParameters privateKey = rsa.ExportParameters(true); // ambas claves
string original = "Mensaje secreto para RSA";
// Cifrado con clave pública byte[] encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(original), RSAEncryptionPadding.OaepSHA256);
// Descifrado con clave privada byte[] decryptedData = rsa.Decrypt(encryptedData, RSAEncryptionPadding.OaepSHA256); string decrypted = Encoding.UTF8.GetString(decryptedData);
Console.WriteLine($"Original: {original}"); Console.WriteLine($"Descifrado: {decrypted}"); } }}3. Hash de datos (SHA-256, MD5)
Hash
También en la biblioteca
Java Management Extensions (JMX) — monitoreo de aplicaciones Java
Procesamiento de JSON en C# (.NET): guía completa con ejemplos
Generación de Swagger/OpenAPI para C++: revisión de herramientas y bibliotecas