使用openssl对aes的ecb_128加解密
/**
-
aes加密
-
@param data 输入字符串 length 字符串长度 key密钥 out_data输出字符串
*/
void myTools::aes_encode_ecb_128(char *data,int length,unsigned char key,charout_data){int encLen = 0;
int outlen = 0;
unsigned char iv[16] = {0};
unsigned char *encData = (unsigned char *)malloc(length);
memset(encData,0,length);EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();
EVP_CipherInit_ex(ctx, EVP_aes_128_ecb(), NULL, key, iv, 1);
EVP_CipherUpdate(ctx, encData, &outlen, (unsigned char *)data, length);
encLen = outlen;
EVP_CipherFinal(ctx, encData+outlen, &outlen);
encLen += outlen;
EVP_CIPHER_CTX_free(ctx);
strcpy(out_data,(char *)encData);
if(encData)
encData;
}
/**
-
aes解密
-
@param data 输入字符串 length 字符串长度 key密钥 out_data输出字符串
*/
void myTools::aes_decode_ecb_128(unsigned char *data,int length,unsigned char *key,char *out_data){//unsigned char key[32] = “11111111”;
unsigned char iv[16] = {0};
int encLen = 0;
int outlen = 0;
int decLen = 0;
int len = length;
unsigned char * endata =data;
unsigned char *decData = (unsigned char *)malloc(length);
memset(decData,0,length);
EVP_CIPHER_CTX *ctx2;
ctx2 = EVP_CIPHER_CTX_new();
EVP_CipherInit_ex(ctx2, EVP_aes_128_ecb(), NULL, key, iv, 0);
EVP_CipherUpdate(ctx2, decData, &outlen, endata, len);
decLen = outlen;
EVP_CipherFinal(ctx2, decData+outlen, &outlen);
decLen += outlen;
EVP_CIPHER_CTX_free(ctx2);decData[decLen] = ‘\0’;
strcpy(out_data,(char *)decData);if(decData)
free(decData);
}
void test(){
unsigned char key[32] = “1296c85edf00d000”;
char data = “12345678”;
char buf[64];
char buf2[64];
aes_encode_ecb_128(data,strlen(data),key,buf2);
printf(“%s\n”,buf2);
aes_decode_ecb_128((unsigned char)buf2,strlen((char *)buf2),key,buf);
printf(“decode:%s\n”,buf);
}