c++openssl
时间: 2023-08-24 09:04:36 浏览: 106
在C++中使用OpenSSL库可以实现一系列加密和安全相关的功能,例如加密、解密、哈希计算、数字签名等。下面是一个简单的示例,展示了如何在C++中使用OpenSSL库进行AES加密和解密操作:
```cpp
#include <openssl/aes.h>
#include <iostream>
#include <cstring>
std::string encryptAES(const std::string& key, const std::string& plaintext) {
std::string ciphertext;
AES_KEY aesKey;
AES_set_encrypt_key(reinterpret_cast<const unsigned char*>(key.c_str()), 128, &aesKey);
unsigned char iv[AES_BLOCK_SIZE];
memset(iv, 0, sizeof(iv));
int encryptedLength = plaintext.length() + AES_BLOCK_SIZE;
unsigned char* encryptedData = new unsigned char[encryptedLength];
memset(encryptedData, 0, encryptedLength);
AES_cbc_encrypt(reinterpret_cast<const unsigned char*>(plaintext.c_str()), encryptedData, plaintext.length(), &aesKey, iv, AES_ENCRYPT);
ciphertext.assign(reinterpret_cast<char*>(encryptedData), encryptedLength);
delete[] encryptedData;
return ciphertext;
}
std::string decryptAES(const std::string& key, const std::string& ciphertext) {
std::string decryptedText;
AES_KEY aesKey;
AES_set_decrypt_key(reinterpret_cast<const unsigned char*>(key.c_str()), 128, &aesKey);
unsigned char iv[AES_BLOCK_SIZE];
memset(iv, 0, sizeof(iv));
int decryptedLength = ciphertext.length();
unsigned char* decryptedData = new unsigned char[decryptedLength];
memset(decryptedData, 0, decryptedLength);
AES_cbc_encrypt(reinterpret_cast<const unsigned char*>(ciphertext.c_str()), decryptedData, decryptedLength, &aesKey, iv, AES_DECRYPT);
decryptedText.assign(reinterpret_cast<char*>(decryptedData), decryptedLength);
delete[] decryptedData;
return decryptedText;
}
int main() {
std::string key = "0123456789abcdef"; // 128-bit key in hexadecimal representation
std::string plaintext = "Hello, world!";
std::string ciphertext = encryptAES(key, plaintext);
std::cout << "Encrypted: " << ciphertext << std::endl;
std::string decryptedText = decryptAES(key, ciphertext); std::cout << "Decrypted: " << decryptedText << std::endl;
return 0;
}
```
在上面的示例中,我们定义了两个函数`encryptAES`和`decryptAES`来实现AES加密和解密操作。我们使用OpenSSL库中的AES相关函数来进行加密和解密。请注意,这里使用的是AES-128算法,因此密钥的长度为128位(16字节),并且以十六进制字符串的形式表示。
在`main`函数中,我们定义了一个128位的密钥和一个明文字符串。然后,我们调用`encryptAES`函数对明文进行加密,得到密文,并打印出来。接着,我们调用`decryptAES`函数对密文进行解密,得到明文,并再次打印出来。
当你编译和运行此代码时,需要确保已正确配置并安装了OpenSSL库,并将其链接到你的C++项目中。具体的安装和配置步骤可能因操作系统和开发环境而有所不同。
阅读全文