|  #include <stdio.h>   #include <string.h>   #include <openssl/evp.h>      #define CHARS_PER_LINE_BASE64 65  //64+1(\r)    void print(const char *promptStr,unsigned char *data,int len)  {      int i;      printf("======%s[长度=%d]======\n",promptStr,len);      for(i = 0; i < len; i++) printf("%02x", data[i]);      printf("\n===============\n");  }      void encode(unsigned char* outData,              int * outlen,              const unsigned char* data,              int datalen)  {      int tmp=0;      EVP_ENCODE_CTX base64;      EVP_EncodeInit(&base64);            EVP_EncodeUpdate(&base64,          outData,          outlen,           data,             datalen       );      tmp=*outlen;            EVP_EncodeFinal(&base64,outData+*outlen,outlen);      *outlen+=tmp;      outData[*outlen]=0;      printf("base64编码后:",outData,*outlen);  }      bool decode(unsigned char* outData,              int * outlen,              const unsigned char* data,              int datalen)  {      int tmp=0,i=0,lines=0,currpos=0;      EVP_ENCODE_CTX base64;      EVP_DecodeInit(&base64);            for (;;)      {          currpos+=CHARS_PER_LINE_BASE64*lines++;                              i=EVP_DecodeUpdate(&base64,              outData+tmp,                   outlen,                        data+currpos,                  datalen-currpos);          if (i < 0)          {              printf("解码错误!\n");              return false;          }          tmp+=*outlen;          if (i == 0) break;      }            EVP_DecodeFinal(&base64,outData+tmp,outlen);      *outlen=tmp;      outData[*outlen]=0;      print("base64解码后:",outData,*outlen);      return true;  }  
	
 |