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 Auch in der Bibliothek
Laravel Passport für PHP: Vollständige Anleitung mit Codebeispielen
WebSocket-Bibliotheken für TypeScript: ws, Socket.IO, uWebSockets.js
Objektserialisierung in TypeScript: Ein vollständiger Leitfaden
PDF-Berichte in C++ mit libharu und PoDoFo generieren
GraphQL auf Node.js: Vollständiger Leitfaden zur Bibliothek graphql-http