다음을 통해 공유


DecryptMessage(일반) 함수

DecryptMessage(일반) 함수는 메시지의 암호를 해독합니다. 일부 패키지는 메시지를 암호화 및 암호 해독하는 것이 아니라 무결성 해시를 수행하고 검사.

다이제스트 SSP( 보안 지원 공급자 )는 클라이언트와 서버 간에 교환되는 메시지에 대한 암호화 및 암호 해독 기밀성을 SASL 메커니즘으로만 제공합니다.

이 함수는 Schannel SSP와 함께 연결 특성의 재협상(다시 실행) 또는 연결 종료를 위해 메시지 보낸 사람의 요청에 신호를 보내는 데도 사용됩니다.

참고

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

 

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

항목 Description
DecryptMessage(다이제스트) 다이제스트를 사용하여 메시지의 암호를 해독합니다.
DecryptMessage(Kerberos) Kerberos를 사용하여 메시지의 암호를 해독합니다.
DecryptMessage(협상) Negotiate를 사용하여 메시지의 암호를 해독합니다.
DecryptMessage(NTLM) NTLM을 사용하여 메시지의 암호를 해독합니다.
DecryptMessage(Schannel) Schannel을 사용하여 메시지의 암호를 해독합니다.

 

구문

SECURITY_STATUS SEC_Entry DecryptMessage(
  _In_    PCtxtHandle    phContext,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo,
  _Out_   PULONG         pfQOP
);

매개 변수

phContext [in]

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

pMessage [in, out]

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

다이제스트 SSP를 사용하는 경우 입력 시 구조체는 하나 이상의 SecBuffer 구조를 참조합니다. 이 중 하나는 SECBUFFER_DATA 또는 SECBUFFER_STREAM 형식이어야 하며 암호화된 메시지를 포함해야 합니다.

연결 지향이 아닌 컨텍스트와 함께 Schannel SSP를 사용하는 경우 입력 시 구조체에 4개의 SecBuffer 구조체가 포함되어야 합니다. 정확히 하나의 버퍼는 SECBUFFER_DATA 형식이어야 하며 암호화된 메시지를 포함해야 합니다. 이 메시지는 암호가 해독됩니다. 나머지 버퍼는 출력에 사용되며 SECBUFFER_EMPTY 형식이어야 합니다. 연결 지향 컨텍스트의 경우 연결 지향이 아닌 컨텍스트에 대해 설명한 대로 SECBUFFER_DATA 형식 버퍼를 제공해야 합니다. 또한 보안 토큰을 포함하는 두 번째 SECBUFFER_TOKEN 형식 버퍼도 제공해야 합니다.

MessageSeqNo [in]

전송 애플리케이션에 필요한 시퀀스 번호(있는 경우)입니다. 전송 애플리케이션에서 시퀀스 번호를 유지하지 않는 경우 이 매개 변수를 0으로 설정해야 합니다.

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

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

pfQOP [out]

보호 품질을 나타내는 패키지별 플래그를 수신하는 ULONG 형식의 변수에 대한 포인터입니다.

Schannel SSP를 사용하는 경우 이 매개 변수는 사용되지 않으며 NULL로 설정해야 합니다.

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

의미
SECQOP_WRAP_NO_ENCRYPT
메시지는 암호화되지 않았지만 헤더 또는 트레일러가 생성되었습니다.
참고: KERB_WRAP_NO_ENCRYPT 값과 의미가 동일합니다.
SIGN_ONLY
다이제스트 SSP를 사용하는 경우 보안 컨텍스트서명 만 확인하도록 설정된 경우 이 플래그를 사용합니다. 자세한 내용은 보호 품질을 참조하세요.

 

반환 값

함수가 메시지가 올바른 순서로 수신되었는지 확인하면 함수는 SEC_E_OK 반환합니다.

함수가 메시지의 암호를 해독하지 못하면 다음 오류 코드 중 하나를 반환합니다.

반환 코드 설명
SEC_E_BUFFER_TOO_SMALL
메시지 버퍼가 너무 작습니다. 다이제스트 SSP와 함께 사용됩니다.
SEC_E_CRYPTO_SYSTEM_INVALID
보안 컨텍스트에 대해 선택한 암호는 지원되지 않습니다. 다이제스트 SSP와 함께 사용됩니다.
SEC_E_INCOMPLETE_MESSAGE
입력 버퍼의 데이터가 불완전합니다. 애플리케이션은 서버에서 더 많은 데이터를 읽고 DecryptMessage(일반) 를 다시 호출해야 합니다.
SEC_E_INVALID_HANDLE
유효하지 않은 컨텍스트 핸들이 phContext 매개 변수에 지정되었습니다. Digest 및 Schannel SSP와 함께 사용됩니다.
SEC_E_INVALID_TOKEN
버퍼가 잘못된 형식이거나 SECBUFFER_DATA 형식의 버퍼가 없습니다. Schannel SSP와 함께 사용됩니다.
SEC_E_MESSAGE_ALTERED
메시지가 변경되었습니다. Digest 및 Schannel SSP와 함께 사용됩니다.
SEC_E_OUT_OF_SEQUENCE
메시지가 올바른 순서로 수신되지 않았습니다.
SEC_E_QOP_NOT_SUPPORTED
기밀성이나 무결성보안 컨텍스트에서 지원되지 않습니다. 다이제스트 SSP와 함께 사용됩니다.
SEC_I_CONTEXT_EXPIRED
메시지 보낸 사람 연결 사용을 완료 하 고 종료를 시작 했습니다. 종료를 시작하거나 인식하는 방법에 대한 자세한 내용은 Schannel 연결 종료를 참조하세요. Schannel SSP와 함께 사용됩니다.
SEC_I_RENEGOTIATE
원격 파티에는 새 핸드셰이크 시퀀스가 필요하거나 애플리케이션이 종료를 방금 시작했습니다. 협상 루프로 돌아가 서 AcceptSecurityContext(일반) 또는 InitializeSecurityContext(일반)를 호출하여 빈 입력 버퍼를 전달합니다.
함수가 SEC_BUFFER_EXTRA 형식의 버퍼를 반환하는 경우 AcceptSecurityContext(일반) 함수에 입력 버퍼로 전달되어야 합니다.
Schannel SSP와 함께 사용됩니다.
Schannel 커널 모드에는 재협상이 지원되지 않습니다. 호출자는 이 반환 값을 무시하거나 연결을 종료해야 합니다. 값이 무시되면 클라이언트 또는 서버가 결과적으로 연결을 종료할 수 있습니다.

 

설명

Schannel SSP를 사용하면 메시지 발신자가 연결을 종료하면 DecryptMessage(일반) 함수가 SEC_I_CONTEXT_EXPIRED 반환합니다. 종료를 시작하거나 인식하는 방법에 대한 자세한 내용은 Schannel 연결 종료를 참조하세요.

Schannel SSP를 사용하면 메시지 발신자가 연결(보안 컨텍스트)을 재협상하려고 할 때 DecryptMessage(일반)가 SEC_I_RENEGOTIATE 반환합니다. 애플리케이션은 AcceptSecurityContext(일반) ( 서버 쪽) 또는 InitializeSecurityContext(일반)( 클라이언트 쪽)를 호출하고 빈 입력 버퍼를 전달하여 요청된 재협상을 처리합니다. 이 초기 호출이 값을 반환한 후 애플리케이션이 새 연결을 만드는 것처럼 계속 진행합니다. 자세한 내용은 [Schannel 보안 컨텍스트 만들기](creating-an-schannel-security-context.md)를 참조하세요.

GSSAPI와의 상호 운용에 대한 자세한 내용은 GSSAPI와 SSPI/Kerberos 상호 운용성을 참조하세요.

요구 사항

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

추가 정보

SSPI 함수

EncryptMessage(일반)

SecBuffer

SecBufferDesc