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

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



Datensicherheit ist eine der zentralen Aufgaben der modernen Entwicklung. Die .NET-Plattform bietet einen leistungsstarken und flexiblen Satz von Werkzeugen für den kryptographischen Schutz im Namensraum System.Security.Cryptography. In diesem Artikel werden wir die wichtigsten Möglichkeiten der Kryptographie in C# im Detail besprechen: symmetrische und asymmetrische Verschlüsselung sowie Hashing von Daten. Das Material wird sowohl für Anfänger als auch für erfahrene Entwickler nützlich sein, die ihr Wissen systematisieren möchten.



1. Wichtige Namensräume und Klassen



Die gesamte kryptographische Funktionalität ist in der Assembly System.Security.Cryptography konzentriert. Wichtige Klassen:

  • Aes, DES, TripleDES — symmetrische Algorithmen;
  • RSA, ECDsa, ECDiffieHellman — asymmetrische Algorithmen;
  • SHA256, SHA512, MD5 — Hashing-Algorithmen;
  • RandomNumberGenerator — kryptographisch sicherer Zufallszahlengenerator.


Wichtig: Verwenden Sie nur moderne Algorithmen. MD5 und SHA1 gelten als veraltet und unsicher für kryptographische Zwecke.



2. Symmetrische Verschlüsselung (AES)



Symmetrische Verschlüsselung verwendet denselben Schlüssel zum Verschlüsseln und Entschlüsseln. Der beliebteste Algorithmus ist AES (Advanced Encryption Standard). Betrachten wir ein Beispiel für die Verschlüsselung einer Zeichenkette.



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

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

ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.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 aes = Aes.Create()) { aes.Key = key; aes.IV = iv;

ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.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(); } } } } }}


Verwenden Sie zur Generierung eines sicheren Schlüssels und Initialisierungsvektors (IV) RandomNumberGenerator:



using System.Security.Cryptography;

byte[] key = new byte[32]; // 256 Bitbyte[] iv = new byte[16]; // 128 Bitusing (RandomNumberGenerator rng = RandomNumberGenerator.Create()){ rng.GetBytes(key); rng.GetBytes(iv);}


3. Asymmetrische Verschlüsselung (RSA)



Asymmetrische Verschlüsselung verwendet ein Schlüsselpaar: einen öffentlichen (public) und einen privaten (private) Schlüssel. RSA ist ein klassischer Algorithmus, der sich zur Verschlüsselung kleiner Datenmengen eignet (normalerweise bis zu 190 Byte für einen 2048-Bit-Schlüssel). Beispiel:



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

public class RsaEncryption{ public static (byte[]

Empfehlungen