Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verschlüssele ich Daten in C++-Code?

Wie verschlüssele ich Daten in C++-Code?

WBOY
WBOYOriginal
2023-11-02 12:49:41943Durchsuche

Wie verschlüssele ich Daten in C++-Code?

Wie verschlüsselt man Daten in C++-Code?

Mit der rasanten Entwicklung des Internets und der zunehmenden Reife der Informationstechnologie wird Datensicherheit immer wichtiger. Bei der Programmierung ist es sehr wichtig, die Datensicherheit zu schützen und zu verhindern, dass Daten illegal eingesehen oder manipuliert werden. In diesem Artikel wird erläutert, wie Sie C++-Code zum Ver- und Entschlüsseln von Daten verwenden, um die Datensicherheit zu gewährleisten.

  1. Schlüsselverschlüsselungsalgorithmus verwenden

Der Schlüsselverschlüsselungsalgorithmus ist ein häufig verwendeter symmetrischer Verschlüsselungsalgorithmus, der denselben Schlüssel für die Verschlüsselung und Entschlüsselung von Daten verwendet. In C++ können Sie einige Open-Source-Verschlüsselungsbibliotheken (z. B. OpenSSL) verwenden, um Schlüsselverschlüsselungsalgorithmen zu implementieren. Nachfolgend finden Sie einen Beispielcode, der den AES-Algorithmus zum Ver- und Entschlüsseln von Daten verwendet:

#include <openssl/aes.h>
#include <string>

std::string encryptAES(std::string data, std::string key) {
    AES_KEY aesKey;
    AES_set_encrypt_key((const unsigned char*)key.c_str(), 128, &aesKey);

    std::string encryptedData;
    encryptedData.resize(data.size() + AES_BLOCK_SIZE);

    unsigned char iv[AES_BLOCK_SIZE];
    memset(iv, 0, sizeof(iv));

    AES_cbc_encrypt((const unsigned char*)data.c_str(),
                    (unsigned char*)encryptedData.data(),
                    data.size(),
                    &aesKey,
                    iv,
                    AES_ENCRYPT);

    return encryptedData;
}

std::string decryptAES(std::string encryptedData, std::string key) {
    AES_KEY aesKey;
    AES_set_decrypt_key((const unsigned char*)key.c_str(), 128, &aesKey);

    std::string decryptedData;
    decryptedData.resize(encryptedData.size());

    unsigned char iv[AES_BLOCK_SIZE];
    memset(iv, 0, sizeof(iv));

    AES_cbc_encrypt((const unsigned char*)encryptedData.c_str(),
                    (unsigned char*)decryptedData.data(),
                    encryptedData.size(),
                    &aesKey,
                    iv,
                    AES_DECRYPT);

    return decryptedData;
}

Der obige Code verwendet den AES-Algorithmus, um Daten und Schlüssel als Eingabe zu verwenden, führt dann Verschlüsselungs- und Entschlüsselungsvorgänge durch und gibt die verschlüsselten/entschlüsselten Ergebnisse zurück. Bei der tatsächlichen Verwendung müssen Sie die Sicherheit des Schlüssels gewährleisten und dürfen ihn nicht im Klartext speichern oder übertragen.

  1. Asymmetrischen Verschlüsselungsalgorithmus verwenden

Der asymmetrische Verschlüsselungsalgorithmus ist ein Algorithmus, der unterschiedliche Schlüssel zur Verschlüsselung und Entschlüsselung verwendet. Zu den gängigen asymmetrischen Verschlüsselungsalgorithmen gehören RSA und ECC. In C++ können Sie einige Open-Source-Verschlüsselungsbibliotheken (z. B. Crypto++) verwenden, um asymmetrische Verschlüsselungsalgorithmen zu implementieren. Nachfolgend finden Sie einen Beispielcode, der den RSA-Algorithmus zum Ver- und Entschlüsseln von Daten verwendet:

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

std::string encryptRSA(std::string data, std::string publicKey) {
    CryptoPP::RSA::PublicKey rsaPublicKey;
    CryptoPP::Base64Decoder base64Decoder;

    base64Decoder.Attach(new CryptoPP::StringSink(publicKey), false);
    rsaPublicKey.Load(base64Decoder);

    CryptoPP::AutoSeededRandomPool rng;
    std::string encryptedData;

    CryptoPP::RSAES_OAEP_SHA_Encryptor encryptor(rsaPublicKey);
    CryptoPP::StringSource(data,
                           true,
                           new CryptoPP::PK_EncryptorFilter(rng,
                                                            encryptor,
                                                            new CryptoPP::StringSink(encryptedData)));

    return encryptedData;
}

std::string decryptRSA(std::string encryptedData, std::string privateKey) {
    CryptoPP::RSA::PrivateKey rsaPrivateKey;
    CryptoPP::Base64Decoder base64Decoder;

    base64Decoder.Attach(new CryptoPP::StringSink(privateKey), false);
    rsaPrivateKey.Load(base64Decoder);

    CryptoPP::AutoSeededRandomPool rng;
    std::string decryptedData;

    CryptoPP::RSAES_OAEP_SHA_Decryptor decryptor(rsaPrivateKey);
    CryptoPP::StringSource(encryptedData,
                           true,
                           new CryptoPP::PK_DecryptorFilter(rng,
                                                            decryptor,
                                                            new CryptoPP::StringSink(decryptedData)));

    return decryptedData;
}

Der obige Code verwendet den RSA-Algorithmus, um Daten und öffentliche/private Schlüssel als Eingabe zu verwenden, führt dann Verschlüsselungs- und Entschlüsselungsvorgänge durch und gibt die verschlüsselten/entschlüsselten Daten zurück Ergebnisse. Der öffentliche Schlüssel wird normalerweise zum Verschlüsseln von Daten verwendet, und der private Schlüssel wird zum Entschlüsseln von Daten verwendet. Bei der tatsächlichen Verwendung ist es notwendig, die Sicherheit des privaten Schlüssels zu gewährleisten und ihn nicht preiszugeben.

  1. Datenintegritätsprüfung

Bei der Datenverschlüsselung muss auch die Datenintegrität berücksichtigt werden. Bei der Überprüfung der Datenintegrität wird den Daten ein Prüfcode hinzugefügt, um sicherzustellen, dass die Daten während der Übertragung nicht manipuliert wurden. Zu den gängigen Algorithmen zur Datenintegritätsprüfung gehören CRC- und Hash-Algorithmen. In C++ können Sie einige Open-Source-Verifizierungsbibliotheken (z. B. Crypto++) verwenden, um die Überprüfung der Datenintegrität zu implementieren. Das Folgende ist ein Beispielcode, der den Hash-Algorithmus verwendet, um den Prüfcode der Daten zu berechnen:

#include <cryptopp/sha.h>
#include <cryptopp/hex.h>
#include <string>

std::string calculateHash(std::string data) {
    CryptoPP::SHA256 hash;
    std::string hashValue;

    CryptoPP::StringSource(data,
                           true,
                           new CryptoPP::HashFilter(hash,
                                                    new CryptoPP::HexEncoder(new CryptoPP::StringSink(hashValue))));

    return hashValue;
}

Der obige Code verwendet den SHA256-Algorithmus, um den Prüfcode der Daten zu berechnen und gibt die hexadezimale Darstellung des Prüfcodes zurück. Nachdem der Prüfcode berechnet wurde, wird er zusammen mit den Daten übertragen oder gespeichert. Der Empfänger berechnet den Prüfcode erneut, nachdem er die Daten empfangen hat, und vergleicht ihn mit dem empfangenen Prüfcode. Wenn beide übereinstimmen, wurden die Daten nicht manipuliert .

Zusammenfassung:

In diesem Artikel wird erläutert, wie Sie C++-Code zum Verschlüsseln und Entschlüsseln von Daten verwenden und wie Sie eine Überprüfung der Datenintegrität durchführen. In praktischen Anwendungen können geeignete Verschlüsselungsalgorithmen und Verifizierungsalgorithmen entsprechend den tatsächlichen Anforderungen ausgewählt und die Sicherheit von Schlüsseln und privaten Schlüsseln gewährleistet werden, um Datensicherheit und -integrität zu gewährleisten. Bei der Datenübertragung oder -speicherung können auch andere Sicherheitsmaßnahmen (z. B. SSL-/TLS-Protokolle) kombiniert werden, um die Datensicherheit weiter zu erhöhen.

Das obige ist der detaillierte Inhalt vonWie verschlüssele ich Daten in C++-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn