假设你是一个程序员,给一个加密和解密字符串的demo
时间: 2024-03-26 14:34:12 浏览: 61
好的,下面是一个使用 AES 加密和解密字符串的示例代码:
```c++
#include <iostream>
#include <string>
#include <openssl/aes.h>
#include <cstring>
using namespace std;
string encrypt(string str, string key) {
AES_KEY aesKey;
if (AES_set_encrypt_key((unsigned char*)key.c_str(), 128, &aesKey) != 0) {
cout << "AES set encrypt key error" << endl;
return "";
}
size_t len = str.length();
unsigned char* input = (unsigned char*)str.c_str();
int padding = AES_BLOCK_SIZE - len % AES_BLOCK_SIZE;
len += padding;
unsigned char* paddedInput = new unsigned char [len + 1];
memcpy(paddedInput, input, str.length());
for (int i = str.length(); i < len; i++) {
paddedInput[i] = (unsigned char)padding;
}
paddedInput[len] = '\0';
unsigned char* output = new unsigned char [len + 1];
memset(output, 0, len + 1);
AES_encrypt(paddedInput, output, &aesKey);
string encryptedStr((char*)output, len);
delete [] paddedInput;
delete [] output;
return encryptedStr;
}
string decrypt(string encryptedStr, string key) {
AES_KEY aesKey;
if (AES_set_decrypt_key((unsigned char*)key.c_str(), 128, &aesKey) != 0) {
cout << "AES set decrypt key error" << endl;
return "";
}
size_t len = encryptedStr.length();
unsigned char* input = (unsigned char*)encryptedStr.c_str();
unsigned char* output = new unsigned char [len + 1];
memset(output, 0, len + 1);
AES_decrypt(input, output, &aesKey);
int padding = output[len - 1];
int decryptedLen = len - padding;
string decryptedStr((char*)output, decryptedLen);
delete [] output;
return decryptedStr;
}
int main() {
string str = "Hello World!";
string key = "mykey";
string encryptedStr = encrypt(str, key);
cout << "加密后的字符串:" << encryptedStr << endl;
string decryptedStr = decrypt(encryptedStr, key);
cout << "解密后的字符串:" << decryptedStr << endl;
return 0;
}
```
该示例代码使用了 OpenSSL 库中的 AES 加密算法对字符串进行加密和解密。其中,`encrypt` 函数接收一个字符串和一个密钥,返回加密后的字符串;`decrypt` 函数接收一个加密后的字符串和一个密钥,返回解密后的字符串。
在加密过程中,先使用 `AES_set_encrypt_key` 函数设置加密密钥,然后对字符串进行填充,再使用 `AES_encrypt` 函数进行加密操作。在解密过程中,先使用 `AES_set_decrypt_key` 函数设置解密密钥,然后使用 `AES_decrypt` 函数进行解密操作,并去除填充部分得到原始字符串。
阅读全文