1. 程式人生 > >linux下安裝openssl和呼叫openssl介面(經過本人測試)

linux下安裝openssl和呼叫openssl介面(經過本人測試)



#include <openssl/evp.h>
#include<stdio.h>
#include<string.h>

int do_encrypt(unsigned char *iv, unsigned char *key, unsigned char*inBuffer, int inLen, unsigned char *outBuffer, int* pOutLen)
{
int tmplen;
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx,EVP_aes_128_cbc(), NULL, key, iv);
if(!EVP_EncryptUpdate(&ctx, outBuffer, pOutLen, inBuffer, inLen))
{
return 0;
}
if(!EVP_EncryptFinal_ex(&ctx, outBuffer + *pOutLen, &tmplen))
{
return 0;
}
*pOutLen += tmplen;
EVP_CIPHER_CTX_cleanup(&ctx);
return 1;
}


int do_decrypt(unsigned char *iv, unsigned char *key, unsigned char*inBuffer, int inLen, unsigned char *outBuffer, int* pOutLen)
{
int tmplen;
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
EVP_DecryptInit_ex(&ctx,EVP_aes_128_cbc(), NULL, key, iv);
if(!EVP_DecryptUpdate(&ctx, outBuffer, pOutLen, inBuffer, inLen))
{
return 0;
}
if(!EVP_DecryptFinal_ex(&ctx, outBuffer + *pOutLen, &tmplen))
{
return 0;
}
*pOutLen += tmplen;
EVP_CIPHER_CTX_cleanup(&ctx);
return 1;
}


int main()
{
char *iv=(char *)malloc(35*sizeof(char));
char *key=(char *)malloc(35*sizeof(char));
unsigned char *inBuffer="hello,world";
unsigned char *outBuffer=(char *)malloc(35*sizeof(char));
int outlen=0;
int ret=0;
int i=0;
unsigned char *inBuffer_new=(char *)malloc(35*sizeof(char));
int inlen_new=0;


printf("input the key:\n");
gets(key);
printf("input the iv:\n");
gets(iv);


ret=do_encrypt(iv,key,inBuffer,strlen(inBuffer),outBuffer,&outlen);

if(ret)
{
printf("the ciphertext is:");
for(i=0;i<outlen;i++)
printf("%02x",outBuffer[i]);
printf("\n");
}else{
printf("do_encrypt err\n");
}


ret=do_decrypt(iv,key,outBuffer,outlen,inBuffer_new,&inlen_new);

if(ret)
{
printf("the plaintext is:");
for(i=0;i<inlen_new;i++)
printf("%c",inBuffer_new[i]);
printf("\n");
}else{
printf("do_encrypt err\n");
}
}