bool uc_base64_decode(const char *in, size_t inlen, unsigned char *out, size_t *outlen) { // TODO: check updated version of wolfSSL, which expects outlen+1 bytes, but only decodes outlen (*outlen) += 1; const int r = Base64_Decode((const byte *) in, inlen, out, outlen); if (r) { UCERROR("base64 decode", r); return false; } return true; }
int Decrypt_Ex(const char *Key, const char *pInput3DES, char *pOutputCGIParameter, int iOutputLen, char *pErrMsg) { char szKey[MAX_CGIPARA_LEN]={0}; int iRet, iLen, iLenAfterDecrypt; char szInput3DES[iOutputLen], szOutTmp[iOutputLen]; //pre operator char sKey[MAX_CGIPARA_LEN]={0}; strncpy(sKey, Key, MAX_CGIPARA_LEN); if ((iLen = strlen(sKey)) < 24) { for (int i = iLen;i < 24;i++) sKey[i] = '0'; } if ((iRet = Create3DesKey(sKey, szKey, sizeof(szKey), pErrMsg) != PAYPORTAL_OK)) { sprintf(pErrMsg, "Create3DesKey fail [key=%s]", sKey); return iRet; } //解密前解码 memset(szInput3DES, 0x0, sizeof(szInput3DES)); decode_hexstring(pInput3DES, szInput3DES, &iLen); if ((iRet = Base64_Decode(szInput3DES, strlen(szInput3DES), (unsigned char *)szOutTmp, iOutputLen, &iLen)) != 0) { sprintf(pErrMsg, "Base64_Decode err[Ret=%d]", iRet); return PORTAL_ENCRYPT_FAIL; } //进行3DES解密 if ((iRet = Portal_des_encrypt(szKey, (const unsigned char *)szOutTmp, (unsigned char *)pOutputCGIParameter,iLen, iOutputLen, &iLenAfterDecrypt, DES_DECRYPT, pErrMsg)) != PAYPORTAL_OK) { strcat(pErrMsg, "Portal_des_encrypt err"); return PORTAL_ENCRYPT_FAIL; } return PAYPORTAL_OK; }