void WXBizMsgCrypt::GenNeedEncryptData(const std::string &sReplyMsg,std::string & sNeedEncrypt ) { //random(16B)+ msg_len(4B) + msg + $AppId std::string sRandStr; GenRandStr(sRandStr,kRandEncryptStrLen); uint32_t iXmlSize = sReplyMsg.size(); uint32_t iNSize = htonl(iXmlSize); std::string sSize ; sSize.assign((const char *)&iNSize,sizeof(iNSize)); sNeedEncrypt.erase(); sNeedEncrypt = sRandStr; sNeedEncrypt += sSize; sNeedEncrypt += sReplyMsg; sNeedEncrypt += m_sAppid; }
static void BencTestStress() { char key[64]; char val[64]; WCHAR tval[64]; Vec<BencObj*> stack(29); BencDict *startDict = new BencDict(); BencDict *d = startDict; BencArray *a = NULL; srand((unsigned int)time(NULL)); // generate new dict or array with 5% probability each, close an array or // dict with 8% probability (less than 10% probability of opening one, to // encourage nesting), generate int, string or raw strings uniformly // across the remaining 72% probability for (int i = 0; i < 10000; i++) { int n = rand() % 100; if (n < 5) { BencDict *nd = new BencDict(); if (a) { a->Add(nd); } else { GenRandStr(key, dimof(key)); d->Add(key, nd); } stack.Push(nd); d = nd; a = NULL; } else if (n < 10) { BencArray *na = new BencArray(); if (a) { a->Add(na); } else { GenRandStr(key, dimof(key)); d->Add(key, na); } stack.Push(na); d = NULL; a = na; } else if (n < 18) { if (stack.Count() > 0) { n = rand() % 100; stack.Pop(); BencObj *o = startDict; if (stack.Count() > 0) { o = stack.Last(); } a = NULL; d = NULL; if (BT_ARRAY == o->Type()) { a = static_cast<BencArray *>(o); } else { d = static_cast<BencDict *>(o); } } } else if (n < (18 + 24)) { int64_t v = rand(); if (a) { a->Add(v); } else { GenRandStr(key, dimof(key)); d->Add(key, v); } } else if (n < (18 + 24 + 24)) { GenRandStr(val, dimof(val)); if (a) { a->AddRaw((const char*)val); } else { GenRandStr(key, dimof(key)); d->AddRaw((const char*)key, val); } } else { GenRandTStr(tval, dimof(tval)); if (a) { a->Add(tval); } else { GenRandStr(key, dimof(key)); d->Add((const char*)key, (const WCHAR *)val); } } } char *s = startDict->Encode(); free(s); delete startDict; }