如何解密存储在BSTR中的加密数据

时间:2014-12-22 04:30:09

标签: c++ visual-studio-2010 com wincrypt

我在本网站上看到过有关此主题的其他链接,但它们没有帮助。如果有人能帮助我,我会非常感激。

我正在阅读使用Visual Studio C ++ 2010表达的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上阅读here看来,我似乎需要指定一个新的语言环境。但是我不确定要指定哪个语言环境才能使这些数据有意义......

以下是完整代码:

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);
                }
            }
        }
    }   
}
}

0 个答案:

没有答案