Crittografare e decrittografare una stringa in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Crittografa una stringa con la classe AesManaged in C#
  2. Decifrare una stringa con la classe AesManaged in C#
Crittografare e decrittografare una stringa in C#

Questa esercitazione discuterà i metodi per crittografare e decrittografare una stringa in C#.

Crittografa una stringa con la classe AesManaged in C#

La crittografia è il processo di conversione dei dati in testo cifrato in modo che qualsiasi persona non autorizzata non possa accedere ai dati. In questo tutorial, utilizzeremo l’algoritmo Advanced Encryption Standard (AES) per crittografare e decrittografare una stringa in C#. La classe AesManaged fornisce metodi per crittografare e decrittografare la nostra stringa utilizzando l’algoritmo AES. La funzione [CreateEncryptor()](https://learn.microsoft.com/it-it/previous-versions/windows/silverlight/dotnet-windows-silverlight/bb360013(v=vs.95/) può crittografare i dati utilizzando una chiave. Dobbiamo passare le nostre chiavi di stringa alla funzione CreateEncryptor(). Il seguente esempio di codice ci mostra come crittografare una stringa secondo l’algoritmo AES con la funzione CreateEncryptor() in 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);
    }
  }
}

Produzione:

6 + PXxVWlBqcUnIdqsMyUHA ==

Nel codice sopra, abbiamo crittografato la stringa WaterWorld con publickey e secretkey come chiavi e abbiamo restituito 6+PXxVWlBqcUnIdqsMyUHA== come stringa crittografata. Entrambe le chiavi devono contenere almeno 8 caratteri.

Decifrare una stringa con la classe AesManaged in C#

La decrittografia è il processo di riconversione del testo cifrato nei dati originali in modo che le persone autorizzate possano accedere ai dati. La funzione CreateDecryptor() può decrittografare i dati utilizzando una chiave. Dobbiamo passare le nostre chiavi di stringa alla funzione CreateEncryptor(). Le chiavi devono essere le stesse usate nella funzione CreateDecryptor(). Il seguente esempio di codice ci mostra come crittografare una stringa secondo l’algoritmo AES con la funzione CreateDecryptor() in 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);
    }
  }
}

Produzione:

WaterWorld

Nel codice sopra, abbiamo convertito la stringa crittografata 6+PXxVWlBqcUnIdqsMyUHA== dell’esempio precedente alla sua forma originale WaterWorld con le chiavi publickey e secretkey. Le chiavi devono essere le stesse usate nell’esempio precedente affinché questo metodo funzioni.

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

Articolo correlato - Csharp String