Criptografía en C# (.NET): cifrado y hash de datos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Criptografía en C# (.NET): cifrado y hash de datos

Las aplicaciones modernas en la plataforma .NET casi siempre requieren protección de datos. La biblioteca System.Security.Cryptography proporciona un conjunto completo de herramientas para implementar operaciones criptográficas: desde cifrado simétrico y asimétrico hasta hash y generación de firmas digitales. En este artículo analizaremos los algoritmos principales disponibles en C# y mostraremos ejemplos de su uso.



1. Clases principales de criptografía en .NET

Todas las clases criptográficas se encuentran en el espacio de nombres System.Security.Cryptography. Las categorías principales son:

  • Cifrado simétrico — una clave para cifrar y descifrar (Aes, DES, TripleDES).
  • Cifrado asimétrico — un par de claves: pública y privada (RSA, ECDiffieHellman).
  • Hash — transformación unidireccional de datos (SHA256, SHA512, MD5).
  • Generación de números aleatorios — generador criptográficamente seguro (RandomNumberGenerator).


2. Cifrado simétrico con ejemplo de AES

El algoritmo AES (Advanced Encryption Standard) es el cifrado simétrico más común. Para usarlo en .NET se utiliza la clase Aes.

Ejemplo de cifrado y descifrado de una cadena:

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); // Clave de 256 bitsbyte[] iv = RandomNumberGenerator.GetBytes(16);  // IV de 128 bits

string original = "Datos secretos";byte[] encrypted = AesExample.EncryptStringToBytes_Aes(original, key, iv);string decrypted = AesExample.DecryptStringFromBytes_Aes(encrypted, key, iv);

Console.WriteLine($"Original: {original}");Console.WriteLine($"Descifrado: {decrypted}");


3. Cifrado asimétrico con RSA

RSA se utiliza para la transmisión segura de claves o pequeños volúmenes de datos. En .NET está implementado mediante la clase RSA.

Ejemplo de generación de claves y cifrado:

using System;using System.Security.Cryptography;using System.Text;

public class RsaExample{ public static void Demonstrate

Recommendations