CryptGenRandom生成asp.net会话ID

时间:2010-01-15 10:26:20

标签: asp.net c++ session

有没有人有CryptGenrRandom类的工作示例来生成会话ID(需要在我的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 :(得分:0)

你没有说出失败是什么 - 但我会采取措施 - 我们在过去的CryptAcquireContext NTE_BAD_KEYSET遇到了问题 - 如果你需要的话指定CRYPT_NEWKEYSET或标记(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());
}