CryptGenRandom для генерации идентификатора сессии asp.net - PullRequest
0 голосов
/ 15 января 2010

есть ли у кого-нибудь рабочий пример класса CryptGenrRandom для генерации идентификатора сеанса (необходимо использовать в моем модуле iis).

HCRYPTPROV   hCryptProv;    
BYTE         pbData[16];

if(CryptAcquireContext( &hCryptProv,  NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) 
{       
    if(CryptGenRandom(hCryptProv, 8, pbData)) 
    {
        std::string s(( const char *) pbData);  
        printf(s.c_str());
    }
    else
    {
        MyHandleError("Error during CryptGenRandom.");
    }
}
else
{
    MyHandleError("Error during CryptAcquireContext!\n");
}   

Я попробовал этот код, но он работает не очень хорошо (я получаю его из msdn), и этот пример не работает для меня (http://www.codeproject.com/KB/security/plaintextsessionkey.aspx)

так что если кто-нибудь знает, как генерировать sessionid с использованием этого класса, пожалуйста, сообщите мне

tnx в любом случае!

1 Ответ

0 голосов
/ 15 января 2010

Вы не говорите, что это за ошибка - но я сделаю удар - у нас были проблемы с CryptAcquireContext в прошлом, повторяя NTE_BAD_KEYSET - если вам нужно указать CRYPT_NEWKEYSET or'd в флаги (CRYPT_VERIFYCONTEXT|CRYPT_NEWKEYSET) и вызвать CryptAcquireContext второй раз в ответ на сбой.

Что-то вроде:

BOOL bResult = CryptAcquireContext(&m_hProv, pszContainer, pszProvider, dwProviderType, dwFlags);
if (!bResult) 
{
    hr = GetLastError(); //already returns an HRESULT

    if (NTE_BAD_KEYSET != hr) return(hr);

    dwFlags |= CRYPT_NEWKEYSET;
    bResult = CryptAcquireContext(&m_hProv, pszContainer, pszProvider, dwProviderType, dwFlags);
    if (!bResult) return(GetLastError());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...