Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyulitkan data dalam kod C++?

Bagaimana untuk menyulitkan data dalam kod C++?

WBOY
WBOYasal
2023-11-02 12:49:41870semak imbas

Bagaimana untuk menyulitkan data dalam kod C++?

Bagaimana untuk menyulitkan data dalam kod C++?

Dengan perkembangan pesat Internet dan peningkatan kematangan teknologi maklumat, keselamatan data telah berubah menjadi lebih penting. Dalam pengaturcaraan, adalah sangat penting untuk melindungi keselamatan data dan menghalang data daripada diakses atau diganggu secara haram. Artikel ini akan memperkenalkan cara menggunakan kod C++ untuk menyulitkan dan menyahsulit data bagi memastikan keselamatan data.

  1. Gunakan algoritma penyulitan kunci

Algoritma penyulitan kunci ialah algoritma penyulitan simetri yang biasa digunakan yang menggunakan kunci yang sama untuk penyulitan dan penyahsulitan data. Dalam C++, anda boleh menggunakan beberapa perpustakaan penyulitan sumber terbuka (seperti OpenSSL) untuk melaksanakan algoritma penyulitan utama. Di bawah ialah contoh kod yang menggunakan algoritma AES untuk menyulitkan dan menyahsulit data:

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

Kod di atas menggunakan algoritma AES untuk mengambil data dan kunci sebagai input, kemudian melakukan operasi penyulitan dan penyahsulitan, dan mengembalikan keputusan data yang disulitkan/nyahsulit. Dalam penggunaan sebenar, anda perlu memastikan keselamatan kunci dan tidak menyimpan atau menghantarnya dalam teks biasa.

  1. Gunakan algoritma penyulitan asimetrik

Algoritma penyulitan asimetri ialah algoritma yang menggunakan kunci berbeza untuk penyulitan dan penyahsulitan Asymmetric SA ECC. Dalam C++, anda boleh menggunakan beberapa perpustakaan penyulitan sumber terbuka (seperti Crypto++) untuk melaksanakan algoritma penyulitan asimetri. Di bawah ialah contoh kod yang menggunakan algoritma RSA untuk menyulitkan dan menyahsulit data:

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

Kod di atas menggunakan algoritma RSA untuk mengambil data dan kunci awam/peribadi sebagai input, kemudian melakukan operasi penyulitan dan penyahsulitan, dan mengembalikan hasil penyulitan /Nyahsulit. Kunci awam biasanya digunakan untuk menyulitkan data, dan kunci peribadi digunakan untuk menyahsulit data. Dalam penggunaan sebenar, adalah perlu untuk memastikan keselamatan kunci persendirian dan tidak membocorkannya.

  1. Semakan integriti data

Dalam proses penyulitan data, integriti data juga perlu dipertimbangkan. Pengesahan integriti data menambah kod semak pada data untuk memastikan bahawa data tidak diganggu semasa penghantaran. Algoritma semakan integriti data biasa termasuk algoritma CRC dan Hash. Dalam C++, anda boleh menggunakan beberapa pustaka pengesahan sumber terbuka (seperti Crypto++) untuk melaksanakan pengesahan integriti data. Berikut ialah contoh kod yang menggunakan algoritma Hash untuk mengira kod semakan data:

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

Kod di atas menggunakan algoritma SHA256 untuk mengira kod semakan data dan mengembalikan perwakilan heksadesimal bagi kod semak. Selepas kod semakan dikira, ia dihantar atau disimpan bersama-sama dengan data Penerima mengira semula kod semakan selepas menerima data dan membandingkannya dengan kod semakan yang diterima Jika kedua-duanya konsisten, data tidak diganggu .

Ringkasan:

Artikel ini memperkenalkan cara menggunakan kod C++ untuk menyulitkan dan menyahsulit data serta cara melaksanakan pengesahan integriti data. Dalam aplikasi praktikal, algoritma penyulitan dan algoritma pengesahan yang sesuai boleh dipilih mengikut keperluan sebenar, dan keselamatan kunci dan kunci peribadi boleh dipastikan untuk memastikan keselamatan dan integriti data. Semasa penghantaran atau penyimpanan data, langkah keselamatan lain (seperti protokol SSL/TLS) juga boleh digabungkan untuk meningkatkan lagi keselamatan data.

Atas ialah kandungan terperinci Bagaimana untuk menyulitkan data dalam kod C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn