您好,登錄后才能下訂單哦!
在C++中,你可以使用<string>
庫來處理字符串,但它本身并不提供加密和解密的直接方法。為了實現字符串的加密和解密,你需要使用其他庫,如OpenSSL或Crypto++。
下面是一個使用OpenSSL庫進行AES加密和解密的示例:
首先,確保你已經安裝了OpenSSL庫。然后,你可以使用以下代碼進行加密和解密:
#include <iostream>
#include <string>
#include <openssl/aes.h>
// AES加密函數
std::string aes_encrypt(const std::string& plaintext, const std::string& key) {
AES_KEY enc_key;
AES_set_encrypt_key(reinterpret_cast<const unsigned char*>(key.c_str()), 256, &enc_key);
std::string ciphertext(plaintext.size() + AES_BLOCK_SIZE, '\0');
AES_cbc_encrypt(reinterpret_cast<const unsigned char*>(plaintext.c_str()),
reinterpret_cast<unsigned char*>(&ciphertext[0]),
plaintext.size(), &enc_key, AES_BLOCK_SIZE, nullptr);
return ciphertext;
}
// AES解密函數
std::string aes_decrypt(const std::string& ciphertext, const std::string& key) {
AES_KEY dec_key;
AES_set_decrypt_key(reinterpret_cast<const unsigned char*>(key.c_str()), 256, &dec_key);
std::string plaintext(ciphertext.size(), '\0');
AES_cbc_encrypt(reinterpret_cast<const unsigned char*>(ciphertext.c_str()),
reinterpret_cast<unsigned char*>(&plaintext[0]),
ciphertext.size(), &dec_key, AES_BLOCK_SIZE, nullptr);
// 去除填充
plaintext.erase(std::remove(plaintext.begin(), plaintext.end(), '\0'), plaintext.end());
return plaintext;
}
int main() {
std::string plaintext = "Hello, World!";
std::string key = "0123456789abcdef"; // 16字節密鑰
std::string ciphertext = aes_encrypt(plaintext, key);
std::cout << "Encrypted text: " << ciphertext << std::endl;
std::string decrypted_text = aes_decrypt(ciphertext, key);
std::cout << "Decrypted text: " << decrypted_text << std::endl;
return 0;
}
注意:
如果你不想使用OpenSSL庫,你還可以考慮使用Crypto++庫,它提供了更豐富的加密和解密功能。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。