0

我在本网站上看到了有关此主题的其他链接,但它们没有帮助。如果有人可以帮助我,我将不胜感激。

我正在阅读使用 Visual Studio C++ 2010 express 使用 WinCrypt API 生成的一行加密文本,如下所示:

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 *,但是为了进行解密,我需要它作为 char *. 使用 WinCrypt 使用 RC4 对数据进行加密。我已经尝试过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);
                }
            }
        }
    }   
}
}
4

0 回答 0