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 |