在当今数字化时代,C++对称加密技术是保护敏感数据安全的重要手段。无论是开发本地应用、网络通信还是文件存储系统,掌握基本的加密知识都至关重要。本教程将带你从零开始,使用C++实现常见的对称加密算法,特别聚焦于广泛使用的AES算法。
对称加密是指加密和解密使用同一个密钥的加密方式。它的优点是速度快、效率高,非常适合处理大量数据。常见的对称加密算法包括:AES(高级加密标准)、DES、3DES、Blowfish 等。其中,AES加密C++实现最为流行,也是现代安全系统的首选。
AES(Advanced Encryption Standard)由美国国家标准与技术研究院(NIST)于2001年确立为标准。它支持128、192和256位密钥长度,具有极高的安全性,并且在硬件和软件中都能高效运行。因此,在数据加密教程中,AES通常是入门首选。
C++标准库本身不包含加密功能,因此我们通常借助第三方库,如 OpenSSL。下面是一个完整的AES-128-CBC模式加密与解密示例。
前提条件:确保你的系统已安装 OpenSSL 开发库(Linux下可使用 sudo apt install libssl-dev)。
#include <iostream>#include <string>#include <openssl/aes.h>#include <openssl/evp.h>#include <vector>using namespace std;// AES-128-CBC 加密函数vector<unsigned char> aes_encrypt(const string& plaintext, const string& key) { EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new(); if (!ctx) return {}; // 初始化加密上下文(使用 AES-128-CBC) if (EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), nullptr, (unsigned char*)key.data(), (unsigned char*)"0123456789abcdef") != 1) { EVP_CIPHER_CTX_free(ctx); return {}; } vector<unsigned char> ciphertext(plaintext.size() + AES_BLOCK_SIZE); int len; // 执行加密 if (EVP_EncryptUpdate(ctx, ciphertext.data(), &len, (unsigned char*)plaintext.data(), plaintext.size()) != 1) { EVP_CIPHER_CTX_free(ctx); return {}; } int ciphertext_len = len; // 完成加密 if (EVP_EncryptFinal_ex(ctx, ciphertext.data() + len, &len) != 1) { EVP_CIPHER_CTX_free(ctx); return {}; } ciphertext_len += len; ciphertext.resize(ciphertext_len); EVP_CIPHER_CTX_free(ctx); return ciphertext;}// AES-128-CBC 解密函数string aes_decrypt(const vector<unsigned char>& ciphertext, const string& key) { EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new(); if (!ctx) return ""; // 初始化解密上下文 if (EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), nullptr, (unsigned char*)key.data(), (unsigned char*)"0123456789abcdef") != 1) { EVP_CIPHER_CTX_free(ctx); return ""; } vector<unsigned char> plaintext(ciphertext.size()); int len; // 执行解密 if (EVP_DecryptUpdate(ctx, plaintext.data(), &len, ciphertext.data(), ciphertext.size()) != 1) { EVP_CIPHER_CTX_free(ctx); return ""; } int plaintext_len = len; // 完成解密 if (EVP_DecryptFinal_ex(ctx, plaintext.data() + len, &len) != 1) { EVP_CIPHER_CTX_free(ctx); return ""; } plaintext_len += len; plaintext.resize(plaintext_len); EVP_CIPHER_CTX_free(ctx); return string(plaintext.begin(), plaintext.end());}int main() { string key = "mysecretpassword"; // 必须为16字节(AES-128) string original = "Hello, this is a secret message!"; cout << "原始消息: " << original << endl; // 加密 auto encrypted = aes_encrypt(original, key); cout << "加密后字节数: " << encrypted.size() << endl; // 解密 string decrypted = aes_decrypt(encrypted, key); cout << "解密结果: " << decrypted << endl; return 0;}
将上述代码保存为 aes_demo.cpp,然后使用以下命令编译(注意链接 OpenSSL 库):
g++ -o aes_demo aes_demo.cpp -lssl -lcrypto
运行程序后,你将看到原始消息被成功加密后再解密还原。
通过本篇数据加密教程,你已经掌握了如何在 C++ 中使用 OpenSSL 实现 AES加密C++ 的基本流程。理解 C++对称加密 原理和实践,是构建安全应用程序的第一步。希望这篇 C++加密算法 入门指南能为你打下坚实基础!
提示:生产环境中请务必使用专业加密库(如 libsodium、Botan)并遵循最新安全规范。
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128709.html