Kryptographie in C++: Vollständiger Leitfaden zu 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++: Von der Theorie zur Praxis der Verschlüsselung und des Hashings



Kryptographie ist die grundlegende Basis für die Sicherheit moderner Anwendungen. In C++ stehen dem Entwickler leistungsstarke Bibliotheken zur Verfügung, die sowohl symmetrische/asymmetrische Verschlüsselung als auch kryptografisches Hashing ermöglichen. In diesem Material behandeln wir zwei Schlüsselbibliotheken: OpenSSL (De-facto-Standard) und Crypto++ (reines C++, praktisch für die Integration). Sie erfahren, wie Sie Daten verschlüsseln, die Integrität prüfen und Passwörter schützen.



Grundlegende kryptografische Konzepte

Bevor wir zum Code übergehen, ist es wichtig, drei grundlegende Operationen zu verstehen:

  • Symmetrische Verschlüsselung (AES, ChaCha20) – ein Schlüssel für Ver- und Entschlüsselung. Schnell, geeignet für große Datenmengen.
  • Asymmetrische Verschlüsselung (RSA, ECC) – ein Schlüsselpaar (öffentlich/privat). Wird für Schlüsselaustausch und digitale Signaturen verwendet.
  • Hashing (SHA-256, MD5) – irreversible Umwandlung von Daten in eine Zeichenkette fester Länge. Wird zur Integritätsprüfung und Passwortspeicherung verwendet.


1. Arbeiten mit OpenSSL in C++

OpenSSL ist eine plattformübergreifende C-Bibliothek, die über Linken verfügbar ist. Installation: sudo apt install libssl-dev (Linux) oder über vcpkg/conan für Windows.



Beispiel: Symmetrische AES-256-CBC-Verschlüsselung

#include <iostream>#include <string>#include <openssl/evp.h>#include <openssl/rand.h>

std::string aes_encrypt(const std::string& plaintext, const unsigned char* key, const unsigned char* iv) { EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new(); EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), nullptr, key, iv);

std::string ciphertext(plaintext.size() + 16, '\\0'); int len = 0, ciphertext_len = 0; EVP_EncryptUpdate(ctx, reinterpret_cast<unsigned char*>(&ciphertext[0]), &len, reinterpret_cast<const unsigned char*>(plaintext.data()), plaintext.size()); ciphertext_len = len; EVP_EncryptFinal_ex(ctx, reinterpret_cast<unsigned char*>(&ciphertext[ciphertext_len]), &len); ciphertext_len += len; ciphertext.resize(ciphertext_len); EVP_CIPHER_CTX_free(ctx); return ciphertext;}

int main() { unsigned char key[32], iv[16]; RAND_bytes(key, sizeof(key)); // Generierung eines zufälligen Schlüssels RAND_bytes(iv, sizeof(iv));

std::string data = "Geheime Nachricht"; std::string encrypted = aes_encrypt(data, key, iv); std::cout << "Verschlüsselt: " << encrypted.size() << " Bytes" << std::endl; return 0;}


SHA-256-Hashing mit OpenSSL

#include <iostream>#include <openssl/sha.h>

std::string sha256(const std::string& str) { unsigned char hash[SHA256_DIGEST_LENGTH]; SHA256_CTX sha256; SHA256_Init(&sha256); SHA256_Update(&sha256, str.c_str(), str.size()); SHA256_Final(hash, &sha256);

std::string output; for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) { char buf[3]; sprintf(buf, "%02x", hash[i]); output += buf; } return output;}

int main() { std::cout << "SHA-256: " << sha256("Hallo, Crypto!") << std::endl; return 0;}


2. Die Bibliothek Crypto++ (reine C++-Implementierung)

Crypto++ (cryptopp) ist eine vollwertige C++-Bibliothek ohne externe Abhängigkeiten. Installation: sudo apt install libcrypto++-dev oder herunterladen von cryptopp.com.



Beispiel: RSA-Verschlüsselung mit Crypto++

#include <iostream>#include <string>#include <cryptopp/rsa.h>#include <cryptopp/osrng.h>#include <cryptopp/base64.h>

int main() { using namespace CryptoPP;

AutoSeededRandomPool rng; Inve

Empfehlungen