0

我正在创建一个使用一对密钥(公钥和私钥)进行加密和解密的小工具。我在我的计算机上导出公钥和私钥,我可以毫无问题地加密和解密文件。当我尝试使用相同的公钥解密其他机器中的文件时遇到问题。

// initializing CSP HCRYPTPROV hProv; HCRYPTKEY hKey;

if(!CryptAcquireContext(hProv, NULL, NULL, PROV_RSA_FULL, 0)){  if(GetLastError() == NTE_BAD_KEYSET){       if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)){          return FALSE;       }   } }

// create a pair keys if (!CryptGenKey(hProv, AT_KEYEXCHANGE,  CRYPT_ARCHIVABLE, &hKey))    return FALSE;

// public key if (!CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, NULL, sizePublicKey))  return FALSE;

*publicKey = (BYTE *) LocalAlloc(LPTR, *sizePublicKey * sizeof(DWORD)); if(*publicKey == NULL)  return FALSE;

if (!CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, *publicKey, sizePublicKey))  return FALSE; // save public key on file

// private key if (!CryptExportKey(hKey, 0, PRIVATEKEYBLOB, 0, NULL, sizePrivateKey))   return FALSE;

*privateKey = (BYTE *) LocalAlloc(LPTR, *sizePrivateKey * sizeof(DWORD)); if(*publicKey == NULL)    return FALSE;

if (!CryptExportKey(hKey, 0, PRIVATEKEYBLOB, 0, *privateKey, sizePrivateKey))   return FALSE;

PrivateKey.key = (BYTE *) LocalAlloc(LPTR, *sizePrivateKey * sizeof(DWORD)); if(*publicKey == NULL)     return FALSE; // save private key on file


//I encrypt file using  if(!CryptEncrypt(hKey, 0, TRUE, 0, cache, &sizeCache, BLOCK_SIZE_ENCRYPT)){
                free(cache);
                return FALSE;           }

//To decrypt file //First import public key

CryptImportKey(hProv, publicKey, sizePublicKey, 0, 0, &hKey)

//To decrypt:           if (!CryptDecrypt(hKey, 0, TRUE, 0, cache, &sizeCache)){
                free(cache);
                return FALSE;           }

在密钥软件创建应用程序的同一台计算机上正确加密和解​​密,但如果我尝试在其他计算机上解密文件,CryptDecrypt() 失败并出现错误 80090003(GetLastError() 得到的错误)知道吗?我究竟做错了什么...?如何将公钥导出到其他计算机?谢谢!

4

1 回答 1

0

可能您没有导出密钥,只是使用包含密钥的 CSP,当您在同一台计算机上时,密钥存储在您使用 cryptoapi“链接”的容器中。转到其他计算机后,容器不存在,因此您无法使用密钥。

确保私钥是可导出的。

于 2013-02-15T09:25:55.523 回答