int B64_decode(const char *strin, char *strout, int cbstr) { CStr altin; if ((cbstr % 4 == 3) || (cbstr % 4 == 2)) { altin.Copy(strin, cbstr); if (cbstr % 4 <= 3) altin << '='; if (cbstr % 4 == 2) altin << '='; strin = altin.Data(); cbstr = altin.Length(); } int len = EVP_DecodeBlock((unsigned char*)strout, (unsigned char*)strin, cbstr); if ( cbstr && (len > 0) ) { if (strin[cbstr-1] == '=') { if (strin[cbstr-2] == '=') return(len-2); else return(len-1); } } return len; }