关于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))