ホームページ >バックエンド開発 >C++ >C++ コードでデータを暗号化するにはどうすればよいですか?

C++ コードでデータを暗号化するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-11-02 12:49:411025ブラウズ

C++ コードでデータを暗号化するにはどうすればよいですか?

C コードでデータを暗号化する方法?

インターネットの急速な発展と情報技術の成熟に伴い、データ セキュリティの重要性がますます高まっています。プログラミングでは、データのセキュリティを保護し、データの不正アクセスや改ざんを防ぐことが非常に重要です。この記事では、C コードを使用してデータを暗号化および復号化し、データのセキュリティを確保する方法を紹介します。

  1. キー暗号化アルゴリズムの使用

キー暗号化アルゴリズムは、データの暗号化と復号化に同じキーを使用する一般的に使用される対称暗号化アルゴリズムです。 C では、いくつかのオープン ソース暗号化ライブラリ (OpenSSL など) を使用してキー暗号化アルゴリズムを実装できます。以下は、AES アルゴリズムを使用してデータの暗号化と復号化を行うサンプル コードです。

#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;
}

上記のコードは、AES アルゴリズムを使用してデータとキーを入力として受け取り、暗号化と復号化の操作を実行し、暗号化されたデータを返します。 /復号化された結果。 .実際の使用では、キーのセキュリティを確保し、平文で保存または送信しないようにする必要があります。

  1. 非対称暗号化アルゴリズムを使用する

非対称暗号化アルゴリズムは、暗号化と復号化に異なるキーを使用するアルゴリズムです。一般的な非対称暗号化アルゴリズムには、RSA および ECC が含まれます。 C では、いくつかのオープンソース暗号化ライブラリ (Crypto など) を使用して、非対称暗号化アルゴリズムを実装できます。以下は、RSA アルゴリズムを使用してデータの暗号化と復号化を行うサンプル コードです。

#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;
}

上記のコードは、RSA アルゴリズムを使用してデータと公開/秘密キーを入力として受け取り、暗号化と復号化の操作を実行して、次の結果を返します。暗号化/復号化の最終結果。通常、公開キーはデータの暗号化に使用され、秘密キーはデータの復号化に使用されます。実際の利用においては、秘密鍵の安全性を確保し、漏洩しないようにする必要がある。

  1. データ整合性チェック

データ暗号化のプロセスでは、データ整合性も考慮する必要があります。データの完全性検証では、データにチェック コードを追加することで、送信中にデータが改ざんされていないことを保証します。一般的なデータ整合性チェック アルゴリズムには、CRC アルゴリズムとハッシュ アルゴリズムが含まれます。 C では、いくつかのオープン ソース検証ライブラリ (Crypto など) を使用してデータ整合性検証を実装できます。以下は、ハッシュ アルゴリズムを使用してデータのチェック コードを計算するサンプル コードです。

#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;
}

上記のコードは、SHA256 アルゴリズムを使用してデータのチェック コードを計算し、チェックの 16 進表現を返します。コード。計算されたチェックコードはデータとともに送信または保存され、受信側はデータ受信後に再度チェックコードを計算し、受信したチェックコードと比較し、両者が一致すればデータは改ざんされていないと判断します。 。

概要:

この記事では、C コードを使用してデータを暗号化および復号化する方法、およびデータ整合性検証を実行する方法を紹介します。実際のアプリケーションでは、実際のニーズに応じて適切な暗号化アルゴリズムと検証アルゴリズムを選択でき、キーと秘密キーのセキュリティを確保してデータのセキュリティと整合性を確保できます。データの送信または保存中に、他のセキュリティ対策 (SSL/TLS プロトコルなど) を組み合わせて、データのセキュリティをさらに強化することもできます。

以上がC++ コードでデータを暗号化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。