>  기사  >  백엔드 개발  >  C++ 코드에서 데이터를 암호화하는 방법은 무엇입니까?

C++ 코드에서 데이터를 암호화하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-11-02 12:49:41870검색

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++)를 사용하여 데이터 무결성 확인을 구현할 수 있습니다. 다음은 Hash 알고리즘을 사용하여 데이터의 검사 코드를 계산하는 예제 코드입니다.

#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.