0

J'écris une application de test pour Microsoft CryptoAPI. Je souhaite exporter la clé secrète d'une partie à l'aide de la clé publique de la seconde partie, puis importer cette clé secrète en tant que clé secrète de la seconde partie (ceci établit une clé secrète partagée pour la communication). Voici mon code:Erreur BAD_UID lors de l'exportation de la clé dans CryptoAPI

if(!CryptExportKey(encryptT->hSymKey, decryptT->hPubKey, SIMPLEBLOB, 0, keyExBuf, &bufLen)) { 
    FormattedDebugPrint(NULL, GetLastError(), "could not export secret key", TRUE); 
    return -1; 
} 
if(!CryptImportKey(decryptT->hCryptProv, keyExBuf, bufLen, decryptT->hPubKey, 0, &(decryptT->hSymKey))) { 
    FormattedDebugPrint(NULL, GetLastError(), "could not import secret key", TRUE); 
    return -1; 
} 

Et cela donne l'erreur:

80090001: Bad UID. 

La paire de clés est généré pour les encryptT et decryptT (émetteur, récepteur) en appelant:

CryptGenKey(encryptT->hCryptProv, CALG_RSA_KEYX, CRYPT_EXPORTABLE, &(encryptT->hPubKey)) 

Une idée de ce qui pourrait causer l'erreur?

Merci,

+0

Pourriez-vous poster plus de code en créant encryptT-> hSymKey et en important decryptT-> hPubKey? Importez-vous hPubKey à partir d'un certificat? Votre erreur est quelque part dans ces deux parties. – Oleg

+0

salut oleg, merci pour la réponse! oui, j'importais directement la clé publique de la partie expéditrice (à la fois "expéditeur" et "destinataire" sont dans la même application), sans d'abord exporter cette clé publique dans un PUBLICKEYBLOB puis l'importer en utilisant le CSP du destinataire. – mindthief

Répondre

0

Peu importe, je l'ai compris. Fondamentalement, vous ne pouvez pas utiliser directement une autre clé publique même si elle est initialisée de la même façon - je devais d'abord exporter cette clé publique, puis l'importer en utilisant le handle vers le fournisseur de chiffrement de l'autre partie.