1、参考代码
openssl evp 对称加密(AES_ecb,ccb) - cocoajin - 博客园
//加密
int kk_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
unsigned char *iv, unsigned char *ciphertext)
{
EVP_CIPHER_CTX *ctx;
int len;
int ciphertext_len;
ctx = EVP_CIPHER_CTX_new();
EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv);
EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len);
ciphertext_len = len;
EVP_EncryptFinal_ex(ctx, ciphertext + len, &len);
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);
return ciphertext_len;
}
//解密
int kk_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
unsigned char *iv, unsigned char *plaintext)
{
EVP_CIPHER_CTX *ctx;
int len;
int plaintext_len;
ctx = EVP_CIPHER_CTX_new();
EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv);
EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len);
plaintext_len = len;
EVP_DecryptFinal_ex(ctx, plaintext + len, &len);
plaintext_len += len;
EVP_CIPHER_CTX_free(ctx);
return plaintext_len;
}
char *key = "0011223344556677";
char *iv = "0102030405060708";
BYTE ciper[32] = {0};
CString strSrc;
GetDlgItemText(IDC_EDIT_Src, strSrc);
CString strUtf8 = Encoder::ANSItoUTF8(strSrc);
int ciperLen = kk_encrypt((BYTE *)(LPCTSTR)strUtf8, strUtf8.GetLength(), (BYTE*)key, (BYTE*)iv, ciper);
2、VS环境搭建
3、填充设置
AES 的 EVP_CIPHER_CTX_set_padding 的padding设置_hddong97的博客-CSDN博客_evp_cipher_ctx
函数全称:
int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
可以设置在加密数据时对不够长的数据进行填充的方式,pad可以设置为以下几个
//in file openssl/evp.h
#define EVP_PADDING_PKCS7 1
#define EVP_PADDING_ISO7816_4 2
#define EVP_PADDING_ANSI923 3
#define EVP_PADDING_ISO10126 4
#define EVP_PADDING_ZERO 5