La encriptación es un proceso esencial para proteger la información confidencial en aplicaciones y sistemas. AES (Advanced Encryption Standard) es un algoritmo de encriptación ampliamente utilizado y seguro. En este artículo, aprenderemos cómo implementar AES Encryption en C# para cifrar y descifrar datos.
Requisitos previos
Antes de comenzar, asegúrate de tener instalado Visual Studio y tener conocimientos básicos de programación en C#.
Paso 1: Importar los espacios de nombres necesarios
El primer paso es importar los espacios de nombres necesarios para trabajar con AES Encryption en C#. Abre tu proyecto en Visual Studio y agrega las siguientes líneas de código al principio de tu archivo:
«`csharp
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
«`
Estos espacios de nombres nos proporcionarán las clases y métodos necesarios para implementar AES Encryption.
Paso 2: Generar una clave y un vector de inicialización
Antes de cifrar y descifrar datos con AES, necesitamos generar una clave y un vector de inicialización. La clave es una cadena de bytes que se utiliza para cifrar y descifrar los datos, mientras que el vector de inicialización es un valor único que se utiliza para iniciar el proceso de cifrado.
Agrega el siguiente código al método principal de tu programa para generar una clave y un vector de inicialización:
«`csharp
static void Main(string[] args)
{
byte[] key;
byte[] iv;
using (Aes aes = Aes.Create())
{
key = aes.Key;
iv = aes.IV;
}
Console.WriteLine(«Clave generada: » + Convert.ToBase64String(key));
Console.WriteLine(«Vector de inicialización generado: » + Convert.ToBase64String(iv));
}
«`
Este código crea una instancia de la clase Aes y utiliza sus propiedades Key y IV para obtener la clave y el vector de inicialización generados. Luego, muestra la clave y el vector de inicialización en la consola.
Paso 3: Crear un objeto de cifrado AES
Una vez que tenemos una clave y un vector de inicialización, podemos crear un objeto de cifrado AES. Este objeto nos permitirá cifrar y descifrar los datos utilizando el algoritmo AES.
Agrega el siguiente código al método principal de tu programa para crear un objeto de cifrado AES:
«`csharp
static void Main(string[] args)
{
byte[] key;
byte[] iv;
using (Aes aes = Aes.Create())
{
key = aes.Key;
iv = aes.IV;
ICryptoTransform encryptor = aes.CreateEncryptor(key, iv);
ICryptoTransform decryptor = aes.CreateDecryptor(key, iv);
}
Console.WriteLine(«Clave generada: » + Convert.ToBase64String(key));
Console.WriteLine(«Vector de inicialización generado: » + Convert.ToBase64String(iv));
}
«`
En este código, creamos dos objetos de tipo ICryptoTransform: uno para cifrar los datos (encryptor) y otro para descifrarlos (decryptor). Estos objetos se crean utilizando el método CreateEncryptor y CreateDecryptor de la clase Aes, pasando la clave y el vector de inicialización como parámetros.
Paso 4: Cifrar los datos
Ahora que tenemos un objeto de cifrado AES, podemos utilizarlo para cifrar los datos. Agrega el siguiente código al método principal de tu programa para cifrar una cadena de texto:
«`csharp
static void Main(string[] args)
{
byte[] key;
byte[] iv;
using (Aes aes = Aes.Create())
{
key = aes.Key;
iv = aes.IV;
ICryptoTransform encryptor = aes.CreateEncryptor(key, iv);
ICryptoTransform decryptor = aes.CreateDecryptor(key, iv);
string plainText = «Texto a cifrar»;
byte[] encryptedData;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
cs.Write(plainBytes, 0, plainBytes.Length);
}
encryptedData = ms.ToArray();
}
Console.WriteLine(«Texto cifrado: » + Convert.ToBase64String(encryptedData));
}
Console.WriteLine(«Clave generada: » + Convert.ToBase64String(key));
Console.WriteLine(«Vector de inicialización generado: » + Convert.ToBase64String(iv));
}
«`
En este código, creamos una cadena de texto llamada plainText que queremos cifrar. Luego, creamos un MemoryStream y un CryptoStream para escribir los datos cifrados en el MemoryStream. Utilizamos el método Write del CryptoStream para escribir los bytes cifrados en el MemoryStream.
Finalmente, convertimos los datos cifrados en el MemoryStream a un array de bytes utilizando el método ToArray y mostramos el resultado en la consola.
Paso 5: Descifrar los datos
Ahora que hemos cifrado los datos, podemos utilizar el objeto de descifrado AES para descifrarlos. Agrega el siguiente código al método principal de tu programa para descifrar los datos cifrados:
«`csharp
static void Main(string[] args)
{
byte[] key;
byte[] iv;
using (Aes aes = Aes.Create())
{
key = aes.Key;
iv = aes.IV;
ICryptoTransform encryptor = aes.CreateEncryptor(key, iv);
ICryptoTransform decryptor = aes.CreateDecryptor(key, iv);
string plainText = «Texto a cifrar»;
byte[] encryptedData;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
cs.Write(plainBytes, 0, plainBytes.Length);
}
encryptedData = ms.ToArray();
}
string decryptedText;
using (MemoryStream ms = new MemoryStream(encryptedData))
{
using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs))
{
decryptedText = sr.ReadToEnd();
}
}
}
Console.WriteLine(«Texto descifrado: » + decryptedText);
}
Console.WriteLine(«Clave generada: » + Convert.ToBase64String(key));
Console.WriteLine(«Vector de inicialización generado: » + Convert.ToBase64String(iv));
}
«`
En este código, creamos una cadena de texto llamada decryptedText para almacenar el resultado del descifrado. Creamos un MemoryStream utilizando los datos cifrados y un CryptoStream para leer los datos del MemoryStream y descifrarlos.
Luego, utilizamos un StreamReader para leer los datos descifrados del CryptoStream y almacenarlos en la cadena de texto decryptedText. Finalmente, mostramos el resultado en la consola.
Conclusión
En este artículo, hemos aprendido cómo implementar AES Encryption en C# para cifrar y descifrar datos. Hemos visto cómo generar una clave y un vector de inicialización, cómo crear un objeto de cifrado AES, cómo cifrar los datos utilizando un CryptoStream y cómo descifrar los datos utilizando un CryptoStream. La encriptación es una técnica esencial para proteger la información confidencial y AES es un algoritmo seguro y ampliamente utilizado para este propósito.