linux下安装openssl和调用openssl接口(经过本人测试)
linux下安装openssl和调用openssl接口
下面以ubuntu为例:
第一步:安装openssl软件,sudo apt-get install openssl(其他linux操作系统,有相应的软件安装命令)
第二步:安装openssl库,sudo apt-get install libssl-dev
完成这两步就可以在控制台使用openssl命令和在程序里调用openssl提供的接口了
如:openssl aes-128-cbc -in hello.txt -out hello.out -e -K 26896cd652fef3f547b46f6664e4cc29 -iv 00000000000000000000000000000000
调用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");
}
}