EncryptMessage(일반) 함수

EncryptMessage(일반) 함수는 개인 정보를 제공하기 위해 메시지를 암호화합니다. EncryptMessage(일반) 를 사용하면 애플리케이션이 선택한 메커니즘에서 지원하는 암호화 알고리즘 중에서 선택할 수 있습니다. EncryptMessage(일반) 함수는 컨텍스트 핸들에서 참조하는 보안 컨텍스트를 사용합니다. 일부 패키지에는 암호화 또는 암호 해독할 메시지가 없지만 검사할 수 있는 무결성 해시를 제공합니다.

다이제스트 SSP( 보안 지원 공급자 )를 사용하는 경우 이 함수는 SASL 메커니즘으로만 사용할 수 있습니다.

Schannel SSP를 사용하는 경우 이 함수는 메시지를 받을 원격 당사자와 협상된 세션 키를 사용하여 메시지를 암호화합니다. 암호화 알고리즘은 사용 중인 [암호 도구 모음](cipher-suites-in-schannel.md)에 의해 결정됩니다.

참고

한 스레드가 암호화되고 다른 스레드가 암호를 해독하는 경우 EncryptMessage(일반)DecryptMessage(일반)는 단일 SSPI(보안 지원 공급자 인터페이스) 컨텍스트의 두 스레드에서 동시에 호출할 수 있습니다. 둘 이상의 스레드가 암호화 중이거나 둘 이상의 스레드가 암호를 해독하는 경우 각 스레드는 고유한 컨텍스트를 가져와야 합니다.

이 함수를 특정 SSP와 함께 사용하는 방법에 대한 자세한 내용은 다음 topics 참조하세요.

항목 설명
EncryptMessage(다이제스트) 다이제스트를 사용하여 개인 정보를 제공하도록 메시지를 암호화합니다.
EncryptMessage(Kerberos) Kerberos를 사용하여 개인 정보를 제공하도록 메시지를 암호화합니다.
EncryptMessage(협상) Negotiate를 사용하여 개인 정보를 제공하도록 메시지를 암호화합니다.
EncryptMessage(NTLM) NTLM을 사용하여 개인 정보를 제공하도록 메시지를 암호화합니다.
EncryptMessage(Schannel) Schannel을 사용하여 개인 정보를 제공하도록 메시지를 암호화합니다.

구문

SECURITY_STATUS SEC_Entry EncryptMessage(
  _In_    PCtxtHandle    phContext,
  _In_    ULONG          fQOP,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo
);

매개 변수

phContext [in]

메시지를 암호화하는 데 사용할 보안 컨텍스트 에 대한 핸들입니다.

fQOP [in]

보호 품질을 나타내는 패키지별 플래그입니다. 보안 패키지는 이 매개 변수를 사용하여 암호화 알고리즘을 선택할 수 있습니다.

Digest SSP를 사용하는 경우 이 매개 변수를 0으로 설정해야 합니다.

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

의미
SECQOP_WRAP_NO_ENCRYPT
헤더 또는 트레일러를 생성하지만 메시지를 암호화하지 않습니다.
참고: KERB_WRAP_NO_ENCRYPT 값과 의미가 동일합니다.
SECQOP_WRAP_OOB_DATA
Schannel 경고 메시지를 보냅니다. 이 경우 pMessage 매개 변수에는 표준 2 바이트 SSL/TLS 이벤트 코드가 포함되어야 합니다. 이 값은 Schannel SSP에서만 지원됩니다.

pMessage [in, out]

SecBufferDesc 구조체에 대한 포인터입니다. 입력 시 구조체는 하나 이상의 SecBuffer 구조를 참조합니다. 이 중 하나는 SECBUFFER_DATA 형식일 수 있습니다. 해당 버퍼에는 암호화할 메시지가 포함됩니다. 메시지가 암호화되어 구조체의 원래 내용을 덮어씁니다.

함수는 SECBUFFER_READONLY 특성으로 버퍼를 처리하지 않습니다.

메시지를 포함하는 SecBuffer 구조체의 길이는 queryContextAttributes(일반) (SECPKG_ATTR_STREAM_SIZES) 함수에서 가져온 cbMaximumMessage보다 크지 않아야 합니다.

다이제스트 SSP를 사용하는 경우 서명 정보를 보관하려면 SECBUFFER_PADDING 또는 SEC_BUFFER_DATA 형식의 두 번째 버퍼가 있어야 합니다. 출력 버퍼의 크기를 얻으려면 QueryContextAttributes(일반) 함수를 호출하고 SECPKG_ATTR_SIZES 지정합니다. 함수는 SecPkgContext_Sizes 구조를 반환합니다. 출력 버퍼의 크기는 cbMaxSignaturecbBlockSize 멤버의 값 합계입니다.

SSL을 사용하지 않는 애플리케이션은 SECBUFFER_PADDING 형식의 SecBuffer 를 제공해야 합니다.

MessageSeqNo [in]

전송 애플리케이션이 메시지에 할당한 시퀀스 번호입니다. 전송 애플리케이션에서 시퀀스 번호를 유지하지 않는 경우 이 매개 변수는 0이어야 합니다.

Digest SSP를 사용하는 경우 이 매개 변수를 0으로 설정해야 합니다. Digest SSP는 내부적으로 시퀀스 번호 매기기를 관리합니다.

Schannel SSP를 사용하는 경우 이 매개 변수를 0으로 설정해야 합니다. Schannel SSP는 시퀀스 번호를 사용하지 않습니다.

반환 값

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

함수가 실패하면 다음 오류 코드 중 하나를 반환합니다.

반환 코드 설명
SEC_E_BUFFER_TOO_SMALL 출력 버퍼가 너무 작습니다. 자세한 내용은 설명 부분을 참조하세요.
SEC_E_CONTEXT_EXPIRED 애플리케이션이 이미 닫힌 컨텍스트를 참조하고 있습니다. 올바르게 작성된 애플리케이션은 이 오류를 수신하면 안 됩니다.
SEC_E_CRYPTO_SYSTEM_INVALID 보안 컨텍스트에 대해 선택한 암호는 지원되지 않습니다.
SEC_E_INSUFFICIENT_MEMORY 요청된 작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다.
SEC_E_INVALID_HANDLE 유효하지 않은 컨텍스트 핸들이 phContext 매개 변수에 지정되었습니다.
SEC_E_INVALID_TOKEN SECBUFFER_DATA 형식 버퍼를 찾을 수 없습니다.
SEC_E_QOP_NOT_SUPPORTED 기밀성이나 무결성보안 컨텍스트에서 지원되지 않습니다.

설명

EncryptMessage(일반) 함수는 보안 컨텍스트의 메시지 및 세션 키를 기반으로 메시지를 암호화합니다.

전송 애플리케이션이 시퀀스 검색을 지원하기 위해 보안 컨텍스트 를 만들고 호출자가 시퀀스 번호를 제공하는 경우 함수는 이 정보를 암호화된 메시지와 함께 포함합니다. 이 정보를 포함하면 메시지 재생, 삽입 및 표시 안 함으로부터 보호됩니다. 보안 패키지는 전송 애플리케이션에서 전달된 시퀀스 번호를 통합합니다.

다이제스트 SSP를 사용하는 경우 QueryContextAttributes(일반) 함수를 호출하고 SECPKG_ATTR_SIZES 지정하여 출력 버퍼의 크기를 가져옵니다. 함수는 SecPkgContext_Sizes 구조를 반환합니다. 출력 버퍼의 크기는 cbMaxSignaturecbBlockSize 멤버의 값 합계입니다.

Schannel SSP와 함께 사용할 경우 pMessage 매개 변수에는 다음 버퍼가 있는 SecBufferDesc 구조체가 포함되어야 합니다.

참고

이러한 버퍼는 표시된 순서대로 제공해야 합니다.

버퍼 유형 설명
SECBUFFER_STREAM_HEADER 내부적으로 사용됩니다. 초기화가 필요하지 않습니다.
SECBUFFER_DATA 암호화할 일반 텍스트 메시지를 포함합니다.
SECBUFFER_STREAM_TRAILER 내부적으로 사용됩니다. 초기화가 필요하지 않습니다.
SECBUFFER_EMPTY 내부적으로 사용됩니다. 초기화가 필요하지 않습니다. 크기는 0일 수 있습니다.

Schannel SSP를 사용하는 경우 QueryContextAttributes(일반) 함수를 호출하고 SECPKG_ATTR_STREAM_SIZES 특성을 지정하여 각 버퍼의 최대 크기를 결정합니다. 이 함수는 멤버가 헤더(cbHeader 멤버), 메시지(cbMaximumMessage 멤버) 및 트레일러(cbTrailer 멤버) 버퍼의 최대 크기를 포함하는 SecPkgContext_StreamSizes 구조를 반환합니다.

최적의 성능을 위해 연속 메모리에서 pMessage 구조를 할당해야 합니다.

Windows XP/2000: 이 함수를 SealMessage라고도 합니다. 이제 애플리케이션은 EncryptMessage(일반) 만 사용해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
헤더
Sspi.h(Security.h 포함)
라이브러리
Secur32.lib
DLL
Secur32.dll

추가 정보