Я видел другие ссылки на этом сайте на эту тему, но они не помогают. Если кто-то может помочь мне с этим, я был бы очень признателен.
Я читаю строку зашифрованного текста, сгенерированного с помощью WinCrypt API, используя Visual Studio C ++ 2010 express следующим образом:
BSTR element;
HRESULT txt = command_body->get_innerText(&element);
size_t len = SysStringLen(element);
unsigned char * cmds;
cmds = (char *)malloc(len);
int ret = wcstombs(cmds,element,len);
Отладчик показывает, что element
указывает на:
"ƒ¦Þ’Î 80:—ÇE³Ž(ùÖðRñ¨5·®•D²Q „× O»C¤ôýdÉùèGñ(åÒ¬¶»“ŽYÞŸÇi‹Bú{l!‹#dŽ "
element
имеет тип данных wchar_t *
Однако для того, чтобы расшифровка произошла, мне нужно это как символ *. Данные были зашифрованы с помощью RC4 с использованием WinCrypt.
я пытался wcstombs
и это не работает вообще. Результаты в cmds
являющийся "[][]"
,
Я не уверен, что я делаю неправильно, но мне нужно как-то иметь эти данные как char *
или, может быть, я что-то упустил полностью. Из того, что я прочитал Вот на MSDN может показаться, что мне нужно указать новую локаль .. но я не уверен, какую локаль указать, чтобы эти данные имели смысл …
Вот полный код:
int main()
{
OleInitialize(NULL);
IWebBrowser2* m_pInetExplorer;
HRESULT hr;
CLSID clsid;
LPUNKNOWN punk=NULL;
CLSIDFromProgID (OLESTR("InternetExplorer.Application"), &clsid);
hr = CoCreateInstance (clsid, NULL, CLSCTX_SERVER, IID_IUnknown, (LPVOID *) &punk);
VARIANT vars[4];
memset(vars,0,sizeof(vars));
BSTR BStrURL = ::SysAllocString(L"http://127.0.0.1:8000/testing.html");
if(SUCCEEDED(hr))
{
punk->QueryInterface (IID_IWebBrowser2, (LPVOID *) &m_pInetExplorer);
punk->Release();
m_pInetExplorer->put_Visible(VARIANT_TRUE);
HRESULT hrie = m_pInetExplorer->Navigate(BStrURL,vars,vars+1,vars+2,vars+3); //Go to webpage
if (SUCCEEDED(hrie))
{
VARIANT_BOOL bBusy = VARIANT_TRUE;
while(bBusy == VARIANT_TRUE)
{
Sleep(500);
m_pInetExplorer->get_Busy(&bBusy);
}
IDispatch* pDisp;
HRESULT test_doc = m_pInetExplorer->get_Document(&pDisp);
if(SUCCEEDED(test_doc))
{
IHTMLDocument2* pHTMLDocument2;
HRESULT hr;
hr = pDisp->QueryInterface( IID_IHTMLDocument2,(void**)&pHTMLDocument2 );
if(SUCCEEDED(hr))
{
IHTMLElement* command_body;
HRESULT get_body = pHTMLDocument2->get_body(&command_body);
if(SUCCEEDED(get_body))
{
BSTR element;
HRESULT txt = command_body->get_innerText(&element);
size_t len = SysStringLen(element);
unsigned char * cmds;
cmds = (char *)malloc(len);
memcpy(cmds,element,len);
}
}
}
}
}
}
Задача ещё не решена.