CryptAcquireContext 在IIS中执行获取句柄为NULL?

可爱的小莱 2012-06-15 11:52:52

程序用到了微软加密库CSP ,在调用CryptAcquireContext时遇到了一下问题:
1、在桌面程序中执行时,可以正常获取到CSP的句柄(hCryptProv )
2、封装成VC动态库在ASP.NET2.0建立的web服务程序中使用,CSP句柄获取到是NULL,CryptAcquireContext函数的返回值是
true
3、查了网上的资料和MSDN得知肯能是权限问题,有推荐使用标记CRYPT_MACHINE_KEYSET,但是我使用了不管用



//获取CSP句柄
HCRYPTPROV hCryptProv = NULL;
DWORD dError;

if (!CryptAcquireContext(&hCryptProv,
NULL,
CSP_NAME_SERVICE,
PROV_RSA_FULL,
CRYPT_MACHINE_KEYSET))
{
if (GetLastError() == NTE_BAD_KEYSET)
{
if (!CryptAcquireContext(&hCryptProv,
NULL,
CSP_NAME_SERVICE, //
PROV_RSA_FULL,
CRYPT_NEWKEYSET|CRYPT_MACHINE_KEYSET))
{
dError = GetLastError();
return dError;
}
}
}

//CSP句柄为空 jiftle 注释 2012-06-14
if(NULL == hCryptProv)
{
return 1;
}

...全文
186 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
可爱的小莱 2012-06-15
  • 打赏
  • 举报
回复
返回值是 TRUE,但是句柄是NULL
[Quote=引用 1 楼 的回复:]

试试这个
C/C++ code


bRetVal = CryptAcquireContextA(&hCryptProv, NULL, MS_ENHANCED_PROV_A, PROV_RSA_FULL, 0);
if(bRetVal == FALSE)
bRetVal = CryptAcquireContextA(&hCryptProv, N……
[/Quote]
可爱的小莱 2012-06-15
  • 打赏
  • 举报
回复
web服务的权限已经做了如下设置:




Yofoo 2012-06-15
  • 打赏
  • 举报
回复
试试这个


bRetVal = CryptAcquireContextA(&hCryptProv, NULL, MS_ENHANCED_PROV_A, PROV_RSA_FULL, 0);
if(bRetVal == FALSE)
bRetVal = CryptAcquireContextA(&hCryptProv, NULL, MS_ENHANCED_PROV_A, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
if(bRetVal == FALSE)
goto MsHashData_Done;

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧