Kryptographie in C# (.NET): Verschlüsselung und Hashing von Daten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Kryptographie in C# (.NET): Verschlüsselung und Hashing von Daten

Moderne Anwendungen auf der .NET-Plattform erfordern fast immer Datenschutz. Die Bibliothek System.Security.Cryptography bietet einen vollständigen Satz von Werkzeugen zur Durchführung kryptographischer Operationen: von symmetrischer und asymmetrischer Verschlüsselung bis hin zu Hashing und Generierung digitaler Signaturen. In diesem Artikel werden wir die wichtigsten in C# verfügbaren Algorithmen besprechen und Beispiele für ihre Verwendung zeigen.



1. Grundlegende Kryptographieklassen in .NET

Alle kryptographischen Klassen befinden sich im Namensraum System.Security.Cryptography. Die Hauptkategorien sind:

  • Symmetrische Verschlüsselung — ein Schlüssel zum Verschlüsseln und Entschlüsseln (Aes, DES, TripleDES).
  • Asymmetrische Verschlüsselung — ein Schlüsselpaar: öffentlicher und privater Schlüssel (RSA, ECDiffieHellman).
  • Hashing — einseitige Transformation von Daten (SHA256, SHA512, MD5).
  • Zufallszahlengenerierung — kryptographisch sicherer Generator (RandomNumberGenerator).


2. Symmetrische Verschlüsselung am Beispiel von AES

Der AES-Algorithmus (Advanced Encryption Standard) ist die am weitesten verbreitete symmetrische Verschlüsselung. Für seine Verwendung in .NET wird die Klasse Aes verwendet.

Beispiel für das Verschlüsseln und Entschlüsseln einer Zeichenfolge:

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

public class AesExample{ public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv) { using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;

ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } return msEncrypt.ToArray(); } } } }

public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] key, byte[] iv) { using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;

ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } }}

Verwendung:

byte[] key = RandomNumberGenerator.GetBytes(32); // 256-Bit-Schlüsselbyte[] iv = RandomNumberGenerator.GetBytes(16);  // 128-Bit-IV

string original = "Geheime Daten";byte[] encrypted = AesExample.EncryptStringToBytes_Aes(original, key, iv);string decrypted = AesExample.DecryptStringFromBytes_Aes(encrypted, key, iv);

Console.WriteLine($"Original: {original}");Console.WriteLine($"Entschlüsselt: {decrypted}");


3. Asymmetrische Verschlüsselung mit RSA

RSA wird zur sicheren Übertragung von Schlüsseln oder kleinen Datenmengen verwendet. In .NET wird es durch die Klasse RSA implementiert.

Beispiel für die Schlüsselgenerierung und Verschlüsselung:

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

public class RsaExample{ public static void Demonstrate

Empfehlungen