Introduction
Here are some deoms code of Base64 encoding/decoding with EVP_Encode/EVP_Decode.
Encode
bool Base64Encode(const std ::vector <unsigned char > & vchInput, std ::string & b64str)
{
EVP_ENCODE_CTX ctx;
EVP_EncodeInit(&ctx);
int destbuflen = vchInput.size() * 2 + 1 ;
char * destbuf = (char *)malloc (destbuflen);
int outl = 0 ;
EVP_EncodeUpdate(&ctx, (unsigned char *)destbuf, &outl, (unsigned char *)&vchInput[0 ], vchInput.size());
int tmplen = 0 ;
EVP_EncodeFinal(&ctx, (unsigned char *)&destbuf[outl], &tmplen);
outl += tmplen;
b64str.append(destbuf, outl);
free (destbuf); destbuf = NULL;
return !b64str.empty();
}
Decode
bool Base64Decode(const std ::string & b64str, std ::vector <unsigned char > & vecResult)
{
EVP_ENCODE_CTX ctx;
int srclen = (((b64str.length()+2 )/4 )*3 )+1 ;
int destlen = 0 ;
vecResult.resize(srclen);
unsigned char * destbuf = &vecResult[0 ];
EVP_DecodeInit(&ctx);
EVP_DecodeUpdate(&ctx, (unsigned char *)destbuf, &destlen, (unsigned char *)b64str.c_str(), b64str.length());
int tmplen = 0 ;
EVP_DecodeFinal(&ctx, (unsigned char *)&vecResult[destlen], &tmplen);
destlen += tmplen;
vecResult.resize(destlen);
return !vecResult.empty();
}