# include & ltOpenSSL/EVP . h & gt;
# include & ltOpenSSL/rand . h & gt;
# include & ltOpenSSL/AES . h & gt;
unsigned char * AES _ encrypt(unsigned char * key,unsigned char* iv,unsigned char* plaintext,int plaintext_len,int * ciphen _ len){
EVP _ CIPHER _ CTX * CTX;
無符號字符*密文;
int len
int密文_ len _ local
//創建並初始化加密上下文
CTX = EVP _ CIPHER _ CTX _ new();
EVP_EncryptInit_ex(ctx,EVP_aes_128_cbc(),NULL,key,iv);
//分配輸出緩沖區
密文=(無符號char *)malloc(plaintext _ len+AES _ BLOCK _ SIZE);
//加密數據
EVP_EncryptUpdate(ctx,密文,& amplen,plaintext,plaintext _ len);
密文_ len _ local = len
//結束加密操作
EVP_EncryptFinal_ex(ctx,密文+len & amp;len);
密文_ len _ local+= len;
//釋放加密上下文
EVP _ CIPHER _ CTX _ free(CTX);
//返回密文和密文長度。
*密文_len =密文_ len _ local
返回密文;
}
unsigned char * AES _ decrypt(unsigned char * key,unsigned char* iv,unsigned char * ciphew,int ciphew _ len,int* plaintext_len) {
EVP _ CIPHER _ CTX * CTX;
無符號字符*明文;
int len
int plaintext _ len _ local
//創建並初始化解密上下文
CTX = EVP _ CIPHER _ CTX _ new();
EVP_DecryptInit_ex(ctx,EVP_aes_128_cbc(),NULL,key,iv);
//分配輸出緩沖區
明文=(無符號char*)malloc(密文_ len);
//解密數據
EVP_DecryptUpdate(ctx,plaintext,& amplen,密文,密文_ len);
明文_ len _ local = len
//結束解密操作
EVP_DecryptFinal_ex(ctx,plaintext + len,& amplen);
明文_ len _ local+= len;
//釋放解密上下文
EVP _ CIPHER _ CTX _ free(CTX);
//返回明文和明文長度。
* plaintext _ len = plaintext _ len _ local;
返回明文;
}
int main() {
//鍵和IV
unsigned char * key =(unsigned char *)" 0123456789012345 ";
unsigned char * iv =(unsigned char *)" 0123456789012345 ";
//明文
無符號char*明文=(無符號char *)“hello,world”;
int plaintext _ len = strlen((char *)plaintext);
//加密操作
int密文_ len
無符號字符*密文= aes_encrypt(key,iv,plaintext,plaintext_len,& amp密文_ len);
//輸出密文
printf("密文:");
for(int I = 0;我& lt密文_ leni++) {
printf("%02x ",密文[I]);
}
printf(" \ n ");
//解密操作
int plaintext _ len2
unsigned char * plain text 2 = AES _ decrypt(key,iv,密文,ciphen _ len,& amp明文_ len 2);
//輸出明文
printf("plaintext: %s\n ",plaintext 2);
//釋放內存
免費(密文);
免費(plain text 2);
返回0;
}
需要註意的是,以上代碼只是壹個大概的實現思路,在實際應用中還需要根據具體情況進行修改和優化。