使用openssl对aes加解密

使用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);

}

猜你喜欢

转载自blog.csdn.net/c13055215176/article/details/127100877