다음을 통해 공유


CryptProtectData 함수(dpapi.h)

CryptProtectData 함수는 DATA_BLOB 구조의 데이터에 대한 암호화를 수행합니다. 일반적으로 데이터를 암호화한 사용자와 동일한 로그온 자격 증명을 가진 사용자만 데이터의 암호를 해독할 수 있습니다. 또한 암호화 및 암호 해독은 일반적으로 동일한 컴퓨터에서 수행해야 합니다. 예외에 대한 자세한 내용은 비고를 참조하세요.

구문

DPAPI_IMP BOOL CryptProtectData(
  [in]           DATA_BLOB                 *pDataIn,
  [in, optional] LPCWSTR                   szDataDescr,
  [in, optional] DATA_BLOB                 *pOptionalEntropy,
  [in]           PVOID                     pvReserved,
  [in, optional] CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
  [in]           DWORD                     dwFlags,
  [out]          DATA_BLOB                 *pDataOut
);

매개 변수

[in] pDataIn

암호화할 일반 텍스트를 포함하는 DATA_BLOB 구조 체에 대한 포인터입니다.

[in, optional] szDataDescr

암호화할 데이터에 대한 읽기 가능한 설명이 포함된 문자열입니다. 이 설명 문자열은 암호화된 데이터에 포함됩니다. 이 매개 변수는 선택 사항이며 NULL로 설정할 수 있습니다.

[in, optional] pOptionalEntropy

데이터를 암호화하는 데 사용되는 암호 또는 기타 추가 엔트로피를 포함하는 DATA_BLOB 구조체에 대한 포인터입니다. 암호화 단계에서 사용되는 DATA_BLOB 구조도 암호 해독 단계에서 사용해야 합니다. 이 매개 변수는 추가 엔트로피 없이 NULL 로 설정할 수 있습니다. 암호 보호에 대한 자세한 내용은 암호 처리를 참조하세요.

[in] pvReserved

나중에 사용할 수 있도록 예약되며 NULL로 설정해야 합니다.

[in, optional] pPromptStruct

프롬프트를 표시할 위치와 시기 및 해당 프롬프트의 내용에 대한 정보를 제공하는 CRYPTPROTECT_PROMPTSTRUCT 구조체에 대한 포인터입니다. 이 매개 변수는 암호화 및 암호 해독 단계 모두에서 NULL 로 설정할 수 있습니다.

[in] dwFlags

이 매개 변수는 다음 플래그 중 하나일 수 있습니다.

의미
CRYPTPROTECT_LOCAL_MACHINE
이 플래그가 설정되면 암호화된 데이터를 개별 사용자 대신 현재 컴퓨터와 연결합니다. CryptProtectData가 호출되는 컴퓨터의 모든 사용자는 CryptUnprotectData를 사용하여 데이터의 암호를 해독할 수 있습니다.
CRYPTPROTECT_UI_FORBIDDEN
이 플래그는 UI(사용자 인터페이스)를 표시하는 옵션이 아닌 원격 상황에서 사용됩니다. 이 플래그가 설정되고 보호 또는 보호 해제 작업에 대해 UI가 지정되면 작업이 실패하고 GetLastError 가 ERROR_PASSWORD_RESTRICTION 코드를 반환합니다.
CRYPTPROTECT_AUDIT
이 플래그는 보호 및 보호 해제 작업에 대한 감사를 생성합니다. 감사 로그 항목은 szDataDescr이 NULL 이 아니고 비어 있지 않은 경우에만 기록됩니다.

[out] pDataOut

암호화된 데이터를 수신하는 DATA_BLOB 구조체에 대한 포인터입니다. DATA_BLOB 구조체 사용을 마치면 LocalFree 함수를 호출하여 pbData 멤버를 해제합니다.

반환 값

함수가 성공하면 함수는 TRUE를 반환 합니다.

함수가 실패하면 FALSE를 반환합니다. 확장 오류 정보는 GetLastError를 호출합니다.

설명

일반적으로 데이터를 암호화한 사용자와 일치하는 로그온 자격 증명 이 있는 사용자만 데이터의 암호를 해독할 수 있습니다. 또한 암호 해독은 일반적으로 데이터가 암호화된 컴퓨터에서만 수행할 수 있습니다. 그러나 로밍 프로필이 있는 사용자는 네트워크의 다른 컴퓨터에서 데이터를 해독할 수 있습니다.

데이터가 암호화될 때 CRYPTPROTECT_LOCAL_MACHINE 플래그가 설정되면 암호화가 수행된 컴퓨터의 모든 사용자가 데이터의 암호를 해독할 수 있습니다.

함수는 암호화를 수행하는 세션 키를 만듭니다. 세션 키는 데이터의 암호를 해독할 때 다시 파생됩니다.

또한 이 함수는 암호화된 데이터에 MAC(메시지 인증 코드)(키 무결성 검사)을 추가하여 데이터 변조를 방지합니다.

동일한 프로세스 또는 프로세스 간에 임시로 사용하기 위해 메모리를 암호화하려면 CryptProtectMemory 함수를 호출합니다.

예제

다음 예제에서는 DATA_BLOB 구조의 데이터 암호화를 보여줍니다. CryptProtectData 함수는 사용자의 로그온 자격 증명을 사용하여 함수가 만드는 세션 키를 사용하여 암호화를 수행합니다. 이 함수를 사용하는 다른 예제는 예제 C 프로그램: CryptProtectData 사용을 참조하세요.

// Encrypt data from DATA_BLOB DataIn to DATA_BLOB DataOut.

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

DATA_BLOB DataIn;
DATA_BLOB DataOut;
BYTE *pbDataInput =(BYTE *)"Hello world of data protection.";
DWORD cbDataInput = strlen((char *)pbDataInput)+1;

//--------------------------------------------------------------------
// Initialize the DataIn structure.

DataIn.pbData = pbDataInput;    
DataIn.cbData = cbDataInput;

//--------------------------------------------------------------------
//  Begin protect phase. Note that the encryption key is created
//  by the function and is not passed.

if(CryptProtectData(
     &DataIn,
     L"This is the description string.", // A description string
                                         // to be included with the
                                         // encrypted data. 
     NULL,                               // Optional entropy not used.
     NULL,                               // Reserved.
     NULL,                               // Pass NULL for the 
                                         // prompt structure.
     0,
     &DataOut))
{
     printf("The encryption phase worked.\n");
     LocalFree(DataOut.pbData);
}
else
{
    printf("Encryption error using CryptProtectData.\n");
    exit(1); 
}

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 dpapi.h
라이브러리 Crypt32.lib
DLL Crypt32.dll

추가 정보

CryptProtectMemory

CryptUnprotectData

데이터 암호화 및 암호 해독 함수

LocalFree