Cifrado AES en C#

Haider Ali 12 octubre 2023
  1. Cifrado AES en C#
  2. Trabajando en Cifrado AES en C#
Cifrado AES en C#

En esta guía, aprenderemos sobre el cifrado AES en C#.

Cifrado AES en C#

El algoritmo del que hablamos es AES o Advanced Encryption Standard. Este algoritmo cifrado simétricamente otorga permiso tanto al remitente como al receptor para usar la misma clave para cifrar los datos o descifrarlos.

Este algoritmo admite modos de cifrado de tres bits. Cifrados de 128, 192 y 256 bits.

AES nos ayuda a crear una clave cifrada y nos proporciona clases y funciones muy necesarias para usar. El gobierno y las industrias privadas han probado el estándar de cifrado avanzado (AES).

Trabajando en Cifrado AES en C#

La biblioteca System.Security.Cryptography se utiliza para todos los métodos necesarios para crear una clave cifrada. Ahora, analicemos las clases utilizadas a través de esta biblioteca, CryptoStream y MemoryStream.

CryptoStream almacena cualquier flujo de los modos mencionados anteriormente. Cualquier flujo se puede cifrar y descifrar si el compilador admite el modo.

La clase MemoryStream se usa cuando una clase almacena flujos para implementarlos. En este caso, CryptoStream está en uso, por lo que MemoryStream implementará la transmisión.

La siguiente clase utilizada es AesManaged, que gestiona el algoritmo AES. La última y última clase utilizada es StreamWriter, escribe caracteres en un flujo, por lo que es fundamental utilizar esta clase si necesitamos trabajar con cifrado AES.

Antes de ir a nuestro código, es importante usar el manejo de excepciones.

Código - clase principal:

using System;
using System.IO;
using System.Security.Cryptography;

namespace ConsoleApp1 {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Write any string to encrypt: ");
      string text = Console.ReadLine();
      EncryptedDATA(text);  // write text to be encrypted
      Console.Read();
    }
  }
}

Código: función que toma la entrada de cadena del usuario:

static void EncryptedDATA(string TextToEncrypt) {
  try {
    using (AesManaged dataEncrypt = new AesManaged()) {
      byte[] TextEncrypted = Encrypt(TextToEncrypt, dataEncrypt.Key, dataEncrypt.IV);
      // passing the string data inside the Encrypt() function
      string myLine = $"the data encrypted is:{System.Text.Encoding.UTF8.GetString(TextEncrypted)}";
      Console.WriteLine(myLine);  // printing the encrypted data
    }
  } catch (Exception EX)  // exception handling
  {
    Console.WriteLine(EX.Message);
  }
}

Código - función que encripta los datos:

static byte[] Encrypt(string TextToEncrypt, byte[] encrypt, byte[] IV) {
  byte[] EncryptedText;
  using (AesManaged AESencrypt = new AesManaged())  // using a AesManaged function
  {
    ICryptoTransform DataEncrypt =
        AESencrypt.CreateEncryptor(encrypt, IV);      // here we are creating an encryptor
    using (MemoryStream memory = new MemoryStream())  // using a MemoryStream function
    {
      using (CryptoStream crypto = new CryptoStream(memory, DataEncrypt, CryptoStreamMode.Write))
      // using a CryptoStream function to store and write stream
      {
        {
          using (StreamWriter stream = new StreamWriter(crypto))
              stream.Write(TextToEncrypt);   // wrting stream
          EncryptedText = memory.ToArray();  // storing stream
        }
      }
    }
    return EncryptedText;
  }

Pueden aparecer errores al operar con encriptación AES. Para manejar estos errores, usamos el manejo de excepciones.

Código fuente completo:

using System;
using System.IO;
using System.Security.Cryptography;

class Program {
  static void Main(string[] args) {
    Console.WriteLine("Write any string to encrypt: ");
    string text = Console.ReadLine();
    EncryptedDATA(text);  // write text to be encrypted
    Console.Read();
  }

  static void EncryptedDATA(string TextToEncrypt) {
    try {
      using (AesManaged dataEncrypt = new AesManaged()) {
        byte[] TextEncrypted = Encrypt(TextToEncrypt, dataEncrypt.Key, dataEncrypt.IV);
        // passing the string data inside the Encrypt() function
        string myLine =
            $"the data encrypted is: {System.Text.Encoding.UTF8.GetString(TextEncrypted)}";
        Console.WriteLine(myLine);  // printing the encrypted data
      }
    } catch (Exception EX)  // exception handling
    {
      Console.WriteLine(EX.Message);
    }
  }

  static byte[] Encrypt(string TextToEncrypt, byte[] encrypt, byte[] IV) {
    byte[] EncryptedText;
    using (AesManaged AESencrypt = new AesManaged())  // using a AesManaged function
    {
      ICryptoTransform DataEncrypt =
          AESencrypt.CreateEncryptor(encrypt, IV);      // here we are creating an encryptor
      using (MemoryStream memory = new MemoryStream())  // using a MemoryStream function
      {
        using (
            CryptoStream crypto = new CryptoStream(
                memory, DataEncrypt,
                CryptoStreamMode.Write))  // using a CryptoStream function to store and write stream
        {
          {
            using (StreamWriter stream = new StreamWriter(crypto))
                stream.Write(TextToEncrypt);   // wrting stream
            EncryptedText = memory.ToArray();  // storing stream
          }
        }
      }
      return EncryptedText;
    }
  }
}

Producción :

Write any string to encrypt:
Hello
the data encrypted is: ??*?2?@???W@G?

El código anterior encriptará cualquier mensaje. Una vez que los datos están encriptados, solo el usuario puede acceder a ellos.

La forma de leer estos datos sería descifrarlos. Entonces y solo los datos serán visibles.

Autor: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn