none
DPAPI - CryptProtectData return TRUE mais output vide RRS feed

  • Question

  • Hello !

    C'est la première fois que j'utilise DPAPI et pas moyen de mettre le doigt sur mon erreur. Comme dit dans le titre, la fonction CryptProtectData me renvoie bien TRUE et GetLastError 0. Malrgé cela, le paramètre de sortie qui doit me renvoyé la string chiffrée est vide.

    Voici mon code et les différents Logs qui s'y pairent :

    BOOL crypt(const char *in, char *out)
    {
            //print "test" - correct
    	Log(("in value = {%s}", in));
            
    	BOOL isCrypt = FALSE;
    	
    	DATA_BLOB inBlob;
    	DATA_BLOB outBlob;
    
    	BYTE* pbDataInput = (BYTE*)in;
    	DWORD cbDataInput = strlen((char*)pbDataInput) + 1;
    	CRYPTPROTECT_PROMPTSTRUCT promptStruct;
    
    	//Initialize inBlob
    	inBlob.pbData = pbDataInput;
    	inBlob.cbData = cbDataInput;
    
    	//Initialize outBlob
    	outBlob.pbData = NULL;
    	outBlob.cbData = NULL;
    
    	//Initialize promptStruct
    	ZeroMemory(&promptStruct,sizeof(promptStruct));
    	promptStruct.cbSize = sizeof(promptStruct);
    	promptStruct.dwPromptFlags = CRYPTPROTECT_PROMPT_ON_PROTECT;
    	promptStruct.szPrompt = L"No Prompt in particular";
    
            isCrypt = CryptProtectData(&inBlob, L"Encrypt data for user", NULL, NULL, &promptStruct, NULL, &outBlob);
    
            //Print 0 - no errors
    	Log(("CryptProtectData returned error code : GetLastError = {%d}", GetLastError()));
    
            //Print 1 - function returned TRUE
    	Log(("isCrypt = {%d}", isCrypt));
    
    	memcpy(out, outBlob.pbData, outBlob.cbData);
    
            //Print nothing - out is empty
            //Same behavior when printing outBlob.pbData
    	Log(("out = {%s}", out));
    
    	return isCrypt;
    }

    Voici. Quelqu'un aurait-il une idée de ce que j'aurais pu manquer ?

    Vous remerciant de votre aide.



    lundi 15 octobre 2018 10:48

Réponses

  • Voici les 3 premier byte de out : {1, 0, 0}

    Ma fonction Log print le caractère out[0], puis out[1], etc... jusqu'au prochain \0 qu'il rencontrera (un printf au final).


    1 n'étant pas un caractère affichable, la chaîne de caractère s'arrête dès le second byte et out est vide.

    • Marqué comme réponse Sillimon lundi 22 octobre 2018 12:20
    lundi 22 octobre 2018 12:19

Toutes les réponses

  • Bonjour Sillimon,

    Je vous propose d'utiliser la fonction strcpy au lieu de la fonction memcpy. 

    Cordialement,
    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    • Marqué comme réponse Sillimon lundi 22 octobre 2018 12:10
    • Non marqué comme réponse Sillimon lundi 22 octobre 2018 12:12
    mardi 16 octobre 2018 10:33
    Modérateur
  • Voici les 3 premier byte de out : {1, 0, 0}

    Ma fonction Log print le caractère out[0], puis out[1], etc... jusqu'au prochain \0 qu'il rencontrera (un printf au final).


    1 n'étant pas un caractère affichable, la chaîne de caractère s'arrête dès le second byte et out est vide.

    • Marqué comme réponse Sillimon lundi 22 octobre 2018 12:20
    lundi 22 octobre 2018 12:19