Поделиться через


Функция CryptUnprotectData (dpapi.h)

Функция CryptUnprotectData расшифровывает и проверяет целостность данных в DATA_BLOB структуре . Как правило, единственным пользователем, который может расшифровать данные, является пользователь с теми же учетными данными входа, что и пользователь, который зашифровал данные. Кроме того, необходимо выполнить шифрование и расшифровку на одном компьютере. Сведения об исключениях см. в разделе "Примечания" CryptProtectData.

Синтаксис

DPAPI_IMP BOOL CryptUnprotectData(
  [in]            DATA_BLOB                 *pDataIn,
  [out, optional] LPWSTR                    *ppszDataDescr,
  [in, optional]  DATA_BLOB                 *pOptionalEntropy,
                  PVOID                     pvReserved,
  [in, optional]  CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
  [in]            DWORD                     dwFlags,
  [out]           DATA_BLOB                 *pDataOut
);

Параметры

[in] pDataIn

Указатель на DATA_BLOB структуру, содержащую зашифрованные данные. Элемент cbData структуры DATA_BLOB содержит длину строки байтов pbData, содержащей текст, который требуется зашифровать.

[out, optional] ppszDataDescr

Указатель на строковое описание зашифрованных данных, включенных в зашифрованные данные. Этот параметр может иметь значение NULL. Завершив использование ppszDataDescr, освободив его, вызвав функцию LocalFree .

[in, optional] pOptionalEntropy

Указатель на структуру DATA_BLOB , содержащую пароль или другую дополнительную энтропию, используемую при шифровании данных. Этот параметр может иметь значение NULL; Однако если в этапе шифрования использовался необязательная структура энтропии DATA_BLOB , то для этапа расшифровки необходимо использовать ту же DATA_BLOB структуру. Сведения о защите паролей см. в разделе "Обработка паролей".

pvReserved

Этот параметр зарезервирован для дальнейшего использования и должен иметь значение NULL.

[in, optional] pPromptStruct

Указатель на структуру CRYPTPROTECT_PROMPTSTRUCT , которая содержит сведения о том, где и когда должны отображаться запросы, а также содержимое этих запросов. Этот параметр может иметь значение NULL.

[in] dwFlags

Значение DWORD , указывающее параметры этой функции. Этот параметр может быть равен нулю, в этом случае параметр не задан или следующий флаг.

Ценность Meaning
CRYPTPROTECT_UI_FORBIDDEN
Этот флаг используется для удаленных ситуаций, когда пользовательский интерфейс не является параметром. Если этот флаг задан и пользовательский интерфейс указан для операции защиты или отмены защиты, операция завершается ошибкой, и GetLastError возвращает код ERROR_PASSWORD_RESTRICTION.
CRYPTPROTECT_VERIFY_PROTECTION
Этот флаг проверяет защиту защищенного BLOB-объекта. Если уровень защиты по умолчанию, настроенный для узла, выше текущего уровня защиты BLOB, функция возвращает CRYPT_I_NEW_PROTECTION_REQUIRED , чтобы сообщить вызывающему объекту снова защитить открытый текст, содержащийся в BLOB.

[out] pDataOut

Указатель на структуру DATA_BLOB , в которой функция хранит расшифрованные данные. Завершив использование структуры DATA_BLOB , освободив его член pbData , вызвав функцию LocalFree .

Возвращаемое значение

Если функция выполнена успешно, функция возвращает ЗНАЧЕНИЕ TRUE.

Если функция завершается ошибкой, возвращает значение FALSE.

Замечания

Функция CryptProtectData создает ключ сеанса при шифровании данных. Этот ключ является производным снова и используется для расшифровки BLOB-объектов данных.

Хэшпроверки подлинности сообщений (MAC), добавленный к зашифрованным данным, используется для определения того, были ли зашифрованные данные изменены каким-либо образом. Однако определенный код ошибки, возвращаемый при обнаружении изменения, может отличаться в зависимости от характера повреждения. Функция может возвращать ERROR_INVALID_DATA, ERROR_INVALID_PARAMETER или в некоторых случаях может завершиться повреждением выходных данных. Приложения не должны полагаться на определенный код ошибки для обнаружения изменения данных. Для надежного обнаружения изменений рекомендуется реализовать дополнительные проверки целостности на уровне приложения.

Завершив использование структуры DATA_BLOB , освободив его член pbData , вызвав функцию LocalFree . Все ppszDataDescr , не допускающие значение NULL , также должны быть освобождены с помощью LocalFree.

Завершив использование конфиденциальной информации, очистите ее от памяти, вызвав функцию SecureZeroMemory .

Примеры

В следующем примере показано расшифровка зашифрованных данных в структуре DATA_BLOB . Эта функция выполняет расшифровку с помощью ключа сеанса, который функция создает с помощью учетных данных входа пользователя. Другой пример, использующий эту функцию, см. в примере программы C: использование CryptProtectData.

// Decrypt data from DATA_BLOB DataOut to DATA_BLOB DataVerify.

//--------------------------------------------------------------------
// Declare and initialize variables.

DATA_BLOB DataOut;
DATA_BLOB DataVerify;
LPWSTR pDescrOut =  NULL;
//--------------------------------------------------------------------
// The buffer DataOut would be created using the CryptProtectData
// function. If may have been read in from a file.

//--------------------------------------------------------------------
//   Begin unprotect phase.

if (CryptUnprotectData(
        &DataOut,
        &pDescrOut,
        NULL,                 // Optional entropy
        NULL,                 // Reserved
        NULL,                 // Here, the optional 
                              // prompt structure is not
                              // used.
        0,
        &DataVerify))
{
     printf("The decrypted data is: %s\n", DataVerify.pbData);
     printf("The description of the data was: %s\n",pDescrOut);
     LocalFree(DataVerify.pbData);
     LocalFree(pDescrOut);
}
else
{
    printf("Decryption error!");
}

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows XP [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2003 [классические приложения | Приложения UWP]
целевая платформа Виндоус
Header dpapi.h
Library Crypt32.lib
DLL Crypt32.dll

См. также

CryptProtectData

CryptUnprotectMemory

Функции шифрования и расшифровки данных

LocalFree

Поставщик шифрования Microsoft Base