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

Recommendations