TCS*_*TCS 5 c++ encryption keystore cryptoapi
我在windows密钥库中创建了RSA密钥对.
我成功加密了数据(对称密钥):
HCERTSTORE hstore = ::CertOpenSystemStore(NULL, L"TestStore");
PCCERT_CONTEXT pctxt = ::CertFindCertificateInStore(hstore, X509_ASN_ENCODING, NULL,
CERT_FIND_SUBJECT_STR, L"My Test Keys", NULL);
HCRYPTPROV hprovider = NULL;
if(!::CryptAcquireContext(&hprovider,
NULL,
MS_ENHANCED_PROV,
PROV_RSA_FULL,
NULL/*CRYPT_NEWKEYSET*/))
{
DWORD err = ::GetLastError();
return 0;
}
HCRYPTKEY hkey = NULL;
if(!::CryptImportPublicKeyInfo(hprovider,
X509_ASN_ENCODING,
&pctxt->pCertInfo->SubjectPublicKeyInfo,
&hkey
))
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在我使用CryptEncrypt()和HCRYPTKEY.
接下来我想用私钥解密数据,但它不可导出.我见过的所有例子都包括导入密钥.
如何在不导出密钥的情况下解密数据?
小智 0
好吧,我不是 RSA/Microsoft 商店的专家,但我想我明白你在这里想要做什么。你这样做有点倒退了。您使用公钥进行加密,并使用私钥进行解密。因此,假设您拥有私钥,因为这是您用来生成公钥的东西。
那么,让我们看看...要解密数据,您需要密钥,对吧?因此,您可以(a)使用公钥加密数据,然后找到导出私钥的方法,但是您将使用类似于私钥加密的东西,并且无论如何您最好使用blowfish,或者( b) 使用您的私钥加密数据,以便您可以共享公钥进行解密。请记住 CryptImportPublicKeyInfo 返回它的句柄:http://msdn.microsoft.com/en-us/library/windows/desktop/aa380209 (v=vs.85).aspx
所以我想说的是,你已经有了答案。当你说你有对称密钥时它就在那里。您将使用相同的公钥来解密,或者这将是一个简单的转换:http://en.wikipedia.org/wiki/Symmetric-key_algorithm
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |