Другой результат в CryptProtectData

Я попытался зашифровать расшифрованную информацию, используя CryptProtectData на C ++. Но в результате я получил разные результаты. Мой код:

FILE *one =fopen("firstencrypt", "wb+");

FILE *two = fopen("secondencrypt", "wb+");
DATA_BLOB encryptdata , decryptdata ,secondendata;
string data = "Hello world.\0";

decryptdata.cbData = (DWORD)data.length();
decryptdata.pbData = (BYTE*)data.c_str();

CryptProtectData(&decryptdata, NULL, NULL, NULL, NULL, 0, &encryptdata); // first protect data
fwrite(encryptdata.pbData, (int)encryptdata.cbData, 1, one); fclose(one); // writing result in file

CryptUnprotectData(&encryptdata, NULL, NULL, NULL, NULL, 0, &decryptdata); // unprotect data
cout << decryptdata.pbData << endl; // log

CryptProtectData(&decryptdata, NULL, NULL, NULL, NULL, 0, &secondendata); // second protect data
fwrite(secondendata.pbData, (int)secondendata.cbData, 1, two); fclose(two); // writing result in file`

В консоли я получил:

Привет, мир.LMEM

первый шестнадцатеричный результат

второй шестнадцатеричный результат

И я замечаю, что с каждым запуском программы я получаю разные результаты. Зачем?

-1

Решение

Каждый раз, когда вы запускаете CryptProtectData, результат (почти наверняка) отличается, потому что ключ шифрования получен из мастер-ключа вместе со случайно сгенерированными «солями» из 16 байтов, которые все хранятся в BLOB-объекте. Эта рандомизация на самом деле является хорошей практикой, и для дешифрования это не проблема.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]