Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}