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();
}