Cifrar y descifrar una cadena en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Cifre una cadena con la clase AesManaged en C#
  2. Descifrar una cadena con la clase AesManaged en C#
Cifrar y descifrar una cadena en C#

Este tutorial discutirá métodos para cifrar y descifrar una cadena en C#.

Cifre una cadena con la clase AesManaged en C#

El cifrado es el proceso de convertir datos en texto cifrado para que cualquier persona no autorizada no pueda acceder a los datos. En este tutorial, usaremos el algoritmo Estándar de cifrado avanzado (AES) para cifrar y descifrar una cadena en C#. La clase AesManaged proporciona métodos para cifrar y descifrar nuestra cadena utilizando el algoritmo AES. La función CreateEncryptor() puede cifrar datos utilizando una clave. Tenemos que pasar nuestras claves de cadena a la función CreateEncryptor(). El siguiente ejemplo de código nos muestra cómo cifrar una cadena de acuerdo con el algoritmo AES con la función CreateEncryptor() en C#.

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

namespace encrypt_decrypt_string {
  class Program {
    static string Encrypt() {
      try {
        string textToEncrypt = "WaterWorld";
        string ToReturn = "";
        string publickey = "12345678";
        string secretkey = "87654321";
        byte[] secretkeyByte = {};
        secretkeyByte = System.Text.Encoding.UTF8.GetBytes(secretkey);
        byte[] publickeybyte = {};
        publickeybyte = System.Text.Encoding.UTF8.GetBytes(publickey);
        MemoryStream ms = null;
        CryptoStream cs = null;
        byte[] inputbyteArray = System.Text.Encoding.UTF8.GetBytes(textToEncrypt);
        using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) {
          ms = new MemoryStream();
          cs = new CryptoStream(ms, des.CreateEncryptor(publickeybyte, secretkeyByte),
                                CryptoStreamMode.Write);
          cs.Write(inputbyteArray, 0, inputbyteArray.Length);
          cs.FlushFinalBlock();
          ToReturn = Convert.ToBase64String(ms.ToArray());
        }
        return ToReturn;
      } catch (Exception ex) {
        throw new Exception(ex.Message, ex.InnerException);
      }
    }
    static void Main(string[] args) {
      string encrypted = Encrypt();
      Console.WriteLine(encrypted);
    }
  }
}

Producción :

6+PXxVWlBqcUnIdqsMyUHA==

En el código anterior, ciframos la cadena WaterWorld con la clave pública y la clave secreta como claves y devolvimos 6+PXxVWlBqcUnIdqsMyUHA== como una cadena cifrada. Ambas claves deben tener al menos 8 caracteres de longitud.

Descifrar una cadena con la clase AesManaged en C#

El descifrado es el proceso de convertir el texto cifrado de nuevo a los datos originales para que las personas autorizadas puedan acceder a los datos. La función CreateDecryptor() puede descifrar datos usando una clave. Tenemos que pasar nuestras claves de cadena a la función CreateEncryptor(). Las claves deben ser las mismas que las utilizadas en la función CreateDecryptor(). El siguiente ejemplo de código nos muestra cómo cifrar una cadena de acuerdo con el algoritmo AES con la función CreateDecryptor() en C#.

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace encrypt_decrypt_string {
  class Program {
    static string Decrypt() {
      try {
        string textToDecrypt = "6+PXxVWlBqcUnIdqsMyUHA==";
        string ToReturn = "";
        string publickey = "12345678";
        string secretkey = "87654321";
        byte[] privatekeyByte = {};
        privatekeyByte = System.Text.Encoding.UTF8.GetBytes(secretkey);
        byte[] publickeybyte = {};
        publickeybyte = System.Text.Encoding.UTF8.GetBytes(publickey);
        MemoryStream ms = null;
        CryptoStream cs = null;
        byte[] inputbyteArray = new byte[textToDecrypt.Replace(" ", "+").Length];
        inputbyteArray = Convert.FromBase64String(textToDecrypt.Replace(" ", "+"));
        using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) {
          ms = new MemoryStream();
          cs = new CryptoStream(ms, des.CreateDecryptor(publickeybyte, privatekeyByte),
                                CryptoStreamMode.Write);
          cs.Write(inputbyteArray, 0, inputbyteArray.Length);
          cs.FlushFinalBlock();
          Encoding encoding = Encoding.UTF8;
          ToReturn = encoding.GetString(ms.ToArray());
        }
        return ToReturn;
      } catch (Exception ae) {
        throw new Exception(ae.Message, ae.InnerException);
      }
    }
    static void Main(string[] args) {
      string decrypted = Decrypt();
      Console.WriteLine(decrypted);
    }
  }
}

Producción :

WaterWorld

En el código anterior, convertimos la cadena cifrada 6+PXxVWlBqcUnIdqsMyUHA== del ejemplo anterior a su forma original WaterWorld con la clave pública y la clave secreta como claves. Las claves deben ser las mismas que las utilizadas en el ejemplo anterior para que este método funcione.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Artículo relacionado - Csharp String