VS2008 openssl实现aes加解密字符串
时间: 2024-05-25 19:07:40 浏览: 232
根据提供的引用内容,下面给出VS2008 openssl实现AES加解密字符串的方法。
1. 下载openssl相关库和头文件,并配置好环境变量。
2. 在头文件中引入openssl对应的库文件。
```c++
#include <openssl/aes.h>
```
3. 实现AES加密和解密函数,下面分别给出ECB和CBC模式的代码。
ECB模式:
```c++
void AESEncrypt_ECB(const unsigned char *in, const unsigned char *key,unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_encrypt_key(key, 128, &aes_key); //设置密钥
for (int i = 0; i < length; i += AES_BLOCK_SIZE) {
AES_encrypt(in + i, out + i, &aes_key);//加密
}
}
void AESDecrypt_ECB(const unsigned char *in, const unsigned char *key,unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_decrypt_key(key, 128, &aes_key); //设置密钥
for (int i = 0; i < length; i += AES_BLOCK_SIZE) {
AES_decrypt(in + i, out + i, &aes_key);//解密
}
}
```
CBC模式:
```c++
void AESEncrypt_CBC(const unsigned char *in, const unsigned char *key,const unsigned char *iv,unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_encrypt_key(key, 128, &aes_key); //设置密钥
AES_cbc_encrypt(in, out, length, &aes_key, iv, AES_ENCRYPT); //加密
}
void AESDecrypt_CBC(const unsigned char *in, const unsigned char *key,const unsigned char *iv,unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_decrypt_key(key, 128, &aes_key); //设置密钥
AES_cbc_encrypt(in, out, length, &aes_key, iv, AES_DECRYPT); //解密
}
```
4. 在主函数中调用上述加解密函数,完整代码如下:
```c++
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
//ECB模式加解密
void AESEncrypt_ECB(const unsigned char *in, const unsigned char *key,
unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_encrypt_key(key, 128, &aes_key); //设置密钥
for (int i = 0; i < length; i += AES_BLOCK_SIZE) {
AES_encrypt(in + i, out + i, &aes_key);//加密
}
}
void AESDecrypt_ECB(const unsigned char *in, const unsigned char *key,
unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_decrypt_key(key, 128, &aes_key); //设置密钥
for (int i = 0; i < length; i += AES_BLOCK_SIZE) {
AES_decrypt(in + i, out + i, &aes_key);//解密
}
}
//CBC模式加解密
void AESEncrypt_CBC(const unsigned char *in, const unsigned char *key,
const unsigned char *iv,unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_encrypt_key(key, 128, &aes_key); //设置密钥
AES_cbc_encrypt(in, out, length, &aes_key, iv, AES_ENCRYPT); //加密
}
void AESDecrypt_CBC(const unsigned char *in, const unsigned char *key,
const unsigned char *iv,unsigned char *out, int length) {
AES_KEY aes_key;
AES_set_decrypt_key(key, 128, &aes_key); //设置密钥
AES_cbc_encrypt(in, out, length, &aes_key, iv, AES_DECRYPT); //解密
}
int main() {
//ECB模式下的AES加解密
unsigned char key[16] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70};
char plainText[] = "Hello World";
int length = strlen(plainText);
unsigned char padded[length + length % AES_BLOCK_SIZE];
memset(padded, 0, sizeof(padded));
memcpy(padded, plainText, length);
AESEncrypt_ECB(padded, key, padded, sizeof(padded));
printf("ECB模式下的AES加密结果: ");
for (int i = 0; i < sizeof(padded); i++) {
printf("%02X ", padded[i]);
}
printf("\n");
AESDecrypt_ECB(padded, key, padded, sizeof(padded));
printf("ECB模式下的AES解密结果: %s\n", padded);
//CBC模式下的AES加解密
unsigned char iv[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
char plainText1[] = "Hello World";
int length1 = strlen(plainText1);
unsigned char padded1[length1 + length1 % AES_BLOCK_SIZE];
memset(padded1, 0, sizeof(padded1));
memcpy(padded1, plainText1, length1);
AESEncrypt_CBC(padded1, key, iv, padded1, sizeof(padded1));
printf("CBC模式下的AES加密结果: ");
for (int i = 0; i < sizeof(padded1); i++) {
printf("%02X ", padded1[i]);
}
printf("\n");
AESDecrypt_CBC(padded1, key, iv, padded1, sizeof(padded1));
printf("CBC模式下的AES解密结果: %s\n", padded1);
return 0;
}
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)