关于CryptGetUserKey获取句柄内容及调用问题。

郎兮 2014-12-10 10:58:10
本人想做一个检测USBUKEY里面加密密钥对是否匹配的程序,解析公钥证书获取公钥句柄加密一段字符串(加密结果每次都不一样。。。。),然后调用CryptGetUserKey获取私钥解密 解密的时候一直报错80090020(MSDN解释:发生内部错误,我也是醉了)

主要代码如下(只贴了主要函数,出错及准备代码不贴了)

//首先获取CSP句柄
CryptAcquireContext(&hCryptProv, NULL, pszProvider, PROV_RSA_FULL, 0)

//解析交换证书获取交换证书结构体指针
pccCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, pBinEncCert, nBinEncCert);

//获取公钥句柄
CryptImportPublicKeyInfo(hCryptProv, X509_ASN_ENCODING, &(pccCertContext->pCertInfo->SubjectPublicKeyInfo), &hCryptPubKey)

//执行加密操作
nCipherData = nPlainData;
memcpy(pCihperData, pPlainData, nPlainData); //为了不覆盖明文先拷贝到另外一个字符串中(明文长度很短,一次加密即可)
CryptEncrypt(hCryptPubKey, 0, TRUE, 0, (BYTE *)pCihperData, (DWORD *)&nCipherData, 1008)

//获取加密私钥句柄
CryptGetUserKey(hCryptProv, AT_KEYEXCHANGE, &hCryptPriKey)

//执行解密操作
nResultData = nCipherData;
memcpy(pResultData, pCihperData, nCipherData);//为了不覆盖密文先拷贝到另外一个字符串中
CryptDecrypt(hCryptPriKey, 0, FALSE, 0, (BYTE *)pResultData, (DWORD *)&nResultData))


...全文
206 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-12-11
  • 打赏
  • 举报
回复
参考SDK6中的 Microsoft SDK\samples\winbase\Security\Crypto\CFiler\Crp.c Microsoft SDK\samples\winbase\Security\Crypto\Encrypt\Encrypt.c Microsoft SDK\samples\winbase\Security\Crypto\InitUser\InitUser.c Microsoft SDK\samples\winbase\Security\Crypto\Sign\VeriFile.c ?
郎兮 2014-12-11
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
通常私钥是不让取出的。
没有取出私钥 CryptGetUserKey获取到公私钥句柄 执行解密操作时使用私钥进行解密 没有导出
赵4老师 2014-12-10
  • 打赏
  • 举报
回复
通常私钥是不让取出的。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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