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 einer der Schlüsselaspekte der modernen Softwareentwicklung. Die .NET-Plattform bietet einen leistungsstarken und flexiblen Satz von Werkzeugen für den kryptographischen Schutz von Informationen im Namensraum System.Security.Cryptography. In diesem Artikel betrachten wir die wichtigsten Möglichkeiten der Kryptographie in C# (.NET): symmetrische und asymmetrische Verschlüsselung, Passwort-Hashing und die Erstellung digitaler Signaturen.



1. Symmetrische Verschlüsselung (AES)



Die symmetrische Verschlüsselung verwendet denselben Schlüssel zum Ver- und Entschlüsseln von Daten. Der am weitesten verbreitete Algorithmus ist AES (Advanced Encryption Standard). In .NET wird er durch die Klasse Aes implementiert.



Beispiel für die Ver- und Entschlüsselung eines Strings mit AES:



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


2. Asymmetrische Verschlüsselung (RSA)



Die asymmetrische Verschlüsselung verwendet ein Schlüsselpaar: einen öffentlichen Schlüssel (public key) zum Verschlüsseln und einen privaten Schlüssel (private key) zum Entschlüsseln. In .NET wird dieser Mechanismus durch die Klasse RSA implementiert. RSA wird häufig für die sichere Übertragung symmetrischer Schlüssel verwendet.



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



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

public class RsaExample{ public static void RsaEncryptDecrypt() { using (RSA rsa = RSA.Create()) { // Schlüsselgenerierung (2048 Bit) RSAParameters publicKey = rsa.ExportParameters(false); // nur öffentlicher Schlüssel RSAParameters privateKey = rsa.ExportParameters(true); // beide Schlüssel

string original = "Geheime Nachricht für RSA";

// Verschlüsselung mit öffentlichem Schlüssel byte[] encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(original), RSAEncryptionPadding.OaepSHA256);

// Entschlüsselung mit privatem Schlüssel byte[] decryptedData = rsa.Decrypt(encryptedData, RSAEncryptionPadding.OaepSHA256); string decrypted = Encoding.UTF8.GetString(decryptedData);

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


3. Daten-Hashing (SHA-256, MD5)



Hashing

Empfehlungen