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
이 매개 변수는 다음 플래그 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
이 플래그가 설정되면 암호화된 데이터를 개별 사용자 대신 현재 컴퓨터와 연결합니다. CryptProtectData가 호출되는 컴퓨터의 모든 사용자는 CryptUnprotectData를 사용하여 데이터의 암호를 해독할 수 있습니다. |
|
이 플래그는 UI(사용자 인터페이스)를 표시하는 옵션이 아닌 원격 상황에서 사용됩니다. 이 플래그가 설정되고 보호 또는 보호 해제 작업에 대해 UI가 지정되면 작업이 실패하고 GetLastError 가 ERROR_PASSWORD_RESTRICTION 코드를 반환합니다. |
|
이 플래그는 보호 및 보호 해제 작업에 대한 감사를 생성합니다. 감사 로그 항목은 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 |