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 に答える