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

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



La seguridad de los datos es una de las tareas clave del desarrollo moderno. La plataforma .NET proporciona un conjunto de herramientas potente y flexible para la protección criptográfica en el espacio de nombres System.Security.Cryptography. En este artículo, analizaremos en detalle las principales capacidades de la criptografía en C#: cifrado simétrico y asimétrico, así como hash de datos. El material será útil tanto para principiantes como para desarrolladores experimentados que deseen sistematizar sus conocimientos.



1. Espacios de nombres y clases principales



Toda la funcionalidad criptográfica se concentra en el ensamblado System.Security.Cryptography. Claves principales:

  • Aes, DES, TripleDES — algoritmos simétricos;
  • RSA, ECDsa, ECDiffieHellman — algoritmos asimétricos;
  • SHA256, SHA512, MD5 — algoritmos de hash;
  • RandomNumberGenerator — generador de números aleatorios criptográficamente seguro.


Importante: utilice solo algoritmos modernos. MD5 y SHA1 se consideran obsoletos e inseguros para fines criptográficos.



2. Cifrado simétrico (AES)



El cifrado simétrico utiliza la misma clave para cifrar y descifrar. El algoritmo más popular es AES (Advanced Encryption Standard). Veamos un ejemplo de cifrado de una cadena.



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 generar una clave segura y un vector de inicialización (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. Cifrado asimétrico (RSA)



El cifrado asimétrico utiliza un par de claves: pública (public) y privada (private). RSA es un algoritmo clásico, adecuado para cifrar pequeñas cantidades de datos (generalmente hasta 190 bytes para una clave de 2048 bits). Ejemplo:



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

public class RsaEncryption{ public static (byte[]

Recommendations