微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从签名数据中获取 HCRYPTKEY?

如何解决如何从签名数据中获取 HCRYPTKEY?

我正在尝试使用 CryptGetUserKey 方法从我商店中的证书获取私钥,然后使用 CryptSignHash 方法,该方法需要在第一个参数中获得函数 { {1}} 的参数中,您需要将证书中的私钥 CryptCreateHash,但我收到错误 HCRYPTKEY。在此之前,我使用名称加密提供程序初始化 NTE_NO_KEY

HCRYPTPROV

然后我以这种方式初始化描述符 HCRYPTPROV PHProv; if (!CryptAcquireContext(&PHProv,NULL,L"Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider",PROV_RSA_FULL,CRYPT_VERIFYCONTEXT)) { if (NTE_KEYSET_NOT_DEF == GetLastError()) { printf("provider is not found"); } else { std::cout << GetLastError(); } return 1; }

HSTORE

并通过方法HCERTSTORE hStoreHandle; hStoreHandle = CertOpenSystemStore(PHProv,L"MY"); if (hStoreHandle) { printf("The MY store is open. \n"); } else { printf("Error getting store handle."); } 获取证书并获取CertFindCertificateInStore代码

HCRYPTKEY

但是我没有从证书中获取密钥,而是收到错误 PCCERT_CONTEXT pRecipientCert = NULL; DWORD PropId = CERT_KEY_PROV_INFO_PROP_ID; pRecipientCert = CertFindCertificateInStore( hStoreHandle,CERT_FIND_PROPERTY,&PropId,pRecipientCert ); std::cout << "Open certificate" << std::endl; HCRYPTKEY phUserKey; if (CertSetCertificateContextProperty( pRecipientCert,CERT_SET_KEY_PROV_HANDLE_PROP_ID,&PHProv ) ) { std::cout << "Success CertSetCertificateContextProperty" << std::endl; } if (CryptGetUserKey(PHProv,AT_KEYEXCHANGE,&phUserKey)) { std::cout << "Success CryptGetUserKey" << std::endl; } else { if(NTE_NO_KEY == GetLastError()) std::cout << "[ERROR] The key requested by the dwKeySpec parameter does not exist." << std::endl; }

也许你有一个如何正确从证书中获取密钥的例子,否则你会发现我的代码错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。