示例#1
0
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;
}