Meilleur auteur de réponses
DPAPI - CryptProtectData return TRUE mais output vide

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.
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
Toutes les réponses
-
Bonjour Sillimon,
Je vous propose d'utiliser la fonction strcpy au lieu de la fonction memcpy.
Cordialement,
NinaMicrosoft 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.
-
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