AES-Verschlüsselung in C#

Haider Ali 12 Oktober 2023
  1. AES-Verschlüsselung in C#
  2. Arbeiten an AES-Verschlüsselung in C#
AES-Verschlüsselung in C#

In diesem Leitfaden lernen wir die AES-Verschlüsselung in C# kennen.

AES-Verschlüsselung in C#

Der Algorithmus, über den wir sprechen, ist AES oder Advanced Encryption Standard. Dieser symmetrisch verschlüsselte Algorithmus gewährt sowohl dem Sender als auch dem Empfänger die Erlaubnis, denselben Schlüssel zu verwenden, um die Daten entweder zu verschlüsseln oder zu entschlüsseln.

Dieser Algorithmus unterstützt Drei-Bit-Verschlüsselungsmodi. 128-, 192- und 256-Bit-Verschlüsselungen.

AES hilft uns beim Erstellen eines verschlüsselten Schlüssels und stellt uns dringend benötigte Klassen und Funktionen zur Verfügung. Die Regierung und die Privatwirtschaft haben den Advanced Encryption Standard (AES) getestet.

Arbeiten an AES-Verschlüsselung in C#

Die Bibliothek System.Security.Cryptography wird für alle Methoden verwendet, die zur Erstellung eines verschlüsselten Schlüssels erforderlich sind. Lassen Sie uns nun die Klassen besprechen, die von dieser Bibliothek verwendet werden, CryptoStream und MemoryStream.

CryptoStream speichert jeden Stream aus den oben genannten Modi. Jeder Stream kann verschlüsselt und entschlüsselt werden, wenn der Compiler den Modus unterstützt.

Die Klasse MemoryStream wird verwendet, wenn eine Klasse Streams speichert, um sie zu implementieren. In diesem Fall wird CryptoStream verwendet, also wird MemoryStream den Stream implementieren.

Als nächste Klasse wird AesManaged verwendet, die den AES-Algorithmus verwaltet. Die letzte und letzte verwendete Klasse ist StreamWriter, sie schreibt Zeichen in einen Stream, daher ist es wichtig, diese Klasse zu verwenden, wenn wir mit AES-Verschlüsselung arbeiten müssen.

Bevor wir zu unserem Code übergehen, ist es wichtig, die Ausnahmebehandlung zu verwenden.

Code - Hauptklasse:

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();
    }
  }
}

Code - Funktion, die die Zeichenfolgeneingabe vom Benutzer entgegennimmt:

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);
  }
}

Code - Funktion, die die Daten verschlüsselt:

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

Beim Betrieb mit AES-Verschlüsselung können Fehler auftreten. Um diese Fehler zu behandeln, verwenden wir die Ausnahmebehandlung.

Vollständiger Quellcode:

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

Ausgang:

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

Der obige Code verschlüsselt jede Nachricht. Sobald die Daten verschlüsselt sind, kann nur der Benutzer darauf zugreifen.

Der Weg, diese Daten zu lesen, wäre, sie zu entschlüsseln. Erst dann sind die Daten sichtbar.

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