Verschlüsseln und Entschlüsseln einer Zeichenkette in C#

Muhammad Maisam Abbas 16 Februar 2024
  1. Verschlüsseln einer Zeichenkette mit der Klasse AesManaged in C#
  2. Entschlüsseln einer Zeichenkette mit der Klasse AesManaged in C#
Verschlüsseln und Entschlüsseln einer Zeichenkette in C#

In diesem Lernprogramm werden Methoden zum Ver- und Entschlüsseln einer Zeichenkette in C# erläutert.

Verschlüsseln einer Zeichenkette mit der Klasse AesManaged in C#

Bei der Verschlüsselung werden Daten in Chiffretext konvertiert, sodass nicht autorisierte Personen nicht auf die Daten zugreifen können. In diesem Tutorial verwenden wir den AES-Algorithmus (Advanced Encryption Standard), um eine Zeichenkette in C# zu verschlüsseln und zu entschlüsseln. Die AesManaged-Klasse bietet Methoden zum Ver- und Entschlüsseln unserer Zeichenkette mithilfe des AES-Algorithmus. Die Funktion CreateEncryptor() kann Daten mit einem Schlüssel verschlüsseln. Wir müssen unsere String-Schlüssel an die Funktion CreateEncryptor() übergeben. Das folgende Codebeispiel zeigt, wie eine Zeichenkette nach dem AES-Algorithmus mit der Funktion CreateEncryptor() in C# verschlüsselt wird.

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

Ausgabe:

6+PXxVWlBqcUnIdqsMyUHA==

Im obigen Code haben wir die Zeichenkette WaterWorld mit den Schlüsseln publickey und secretkey verschlüsselt und die Zeichenkette 6+PXxVWlBqcUnIdqsMyUHA== als verschlüsselte Zeichenkette zurückgegeben. Beide Schlüssel müssen mindestens 8 Zeichen lang sein.

Entschlüsseln einer Zeichenkette mit der Klasse AesManaged in C#

Bei der Entschlüsselung wird der Chiffretext wieder in die Originaldaten konvertiert, sodass autorisierte Personen auf die Daten zugreifen können. Die Funktion CreateDecryptor() kann Daten mit einem Schlüssel entschlüsseln. Wir müssen unsere String-Schlüssel an die Funktion CreateEncryptor() übergeben. Die Schlüssel müssen mit denen übereinstimmen, die in der Funktion CreateDecryptor() verwendet werden. Das folgende Codebeispiel zeigt, wie eine Zeichenkette nach dem AES-Algorithmus mit der Funktion CreateDecryptor() in C# verschlüsselt wird.

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

Ausgabe:

WaterWorld

Im obigen Code haben wir die verschlüsselte Zeichenkette 6+PXxVWlBqcUnIdqsMyUHA== aus dem vorherigen Beispiel zurück in ihre ursprüngliche Form WaterWorld mit den Schlüsseln publickey und secretkey konvertiert. Die Schlüssel müssen mit den im vorherigen Beispiel verwendeten Schlüsseln übereinstimmen, damit diese Methode funktioniert.

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

Verwandter Artikel - Csharp String