CryptDecodeMessage 함수(wincrypt.h)

CryptDecodeMessage 함수는 암호화 메시지를 디코딩, 암호 해독 및 확인합니다.

암호화 메시지 유형을 알 수 없는 경우 이 함수를 사용할 수 있습니다. 함수가 형식 중 하나를 찾으려고 할 수 있도록 dwMsgTypeFlags 상수를 비트 OR 연산과 결합할 수 있습니다. 형식 중 하나가 발견되면 함수는 찾은 형식을 보고하고 해당 형식에 적합한 데이터를 반환합니다.

각 단계에서 함수는 단일 수준의 암호화 또는 인코딩만 해독합니다. 추가 크래킹의 경우 이 함수 또는 다른 간소화된 메시지 함수 중 하나를 다시 호출해야 합니다.

구문

BOOL CryptDecodeMessage(
  [in]                DWORD                       dwMsgTypeFlags,
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncodedBlob,
  [in]                DWORD                       cbEncodedBlob,
  [in]                DWORD                       dwPrevInnerContentType,
  [out, optional]     DWORD                       *pdwMsgType,
  [out, optional]     DWORD                       *pdwInnerContentType,
  [out, optional]     BYTE                        *pbDecoded,
  [in, out, optional] DWORD                       *pcbDecoded,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

매개 변수

[in] dwMsgTypeFlags

메시지 형식을 나타냅니다. 메시지 형식을 비트 OR 연산자와 결합할 수 있습니다. 이 매개 변수는 다음 메시지 유형 중 하나일 수 있습니다.

  • CMSG_DATA_FLAG
  • CMSG_SIGNED_FLAG
  • CMSG_ENVELOPED_FLAG
  • CMSG_SIGNED_AND_ENVELOPED_FLAG
  • CMSG_HASHED_FLAG
참고 반환 후 pdwMsgType에서 가리키는 DWORD는 메시지 형식으로 설정됩니다.
 

[in] pDecryptPara

암호 해독 매개 변수를 포함하는 CRYPT_DECRYPT_MESSAGE_PARA 구조체에 대한 포인터입니다.

[in] pVerifyPara

확인 매개 변수를 포함하는 CRYPT_VERIFY_MESSAGE_PARA 구조체에 대한 포인터입니다.

[in] dwSignerIndex

메시지의 가능한 많은 서명자 중 확인할 서명자를 나타냅니다. 이 인덱스가 함수에 대한 여러 호출에서 변경되어 추가 서명자를 확인할 수 있습니다.

dwSignerIndex 는 첫 번째 서명자에 대해 0으로 설정됩니다. 함수가 FALSE를 반환하고 GetLastError 가 CRYPT_E_NO_SIGNER 반환하는 경우 이전 호출은 메시지의 마지막 서명자를 반환했습니다. 이 매개 변수는 CMSG_SIGNED_AND_ENVELOPED 또는 CMSG_SIGNED 형식의 메시지에만 사용됩니다. 다른 모든 메시지 형식의 경우 0으로 설정해야 합니다.

[in] pbEncodedBlob

디코딩할 인코딩된 BLOB 에 대한 포인터입니다.

[in] cbEncodedBlob

인코딩된 BLOB의 크기(바이트)입니다.

[in] dwPrevInnerContentType

중첩된 암호화 메시지를 처리하는 경우에만 적용됩니다. 외부 암호화 메시지를 처리할 때는 0으로 설정해야 합니다. 중첩된 암호화 메시지를 디코딩할 때 외부 메시지에 대한 CryptDecodeMessage의 이전 호출에 의해 pdwInnerContentType에서 반환된 값으로 설정됩니다. pdwMsgType에 나열된 CMSG 형식일 수 있습니다. 이전 버전과의 호환성을 위해 dwPrevInnerContentType 을 0으로 설정합니다.

[out, optional] pdwMsgType

반환된 메시지 유형을 지정하는 DWORD 에 대한 포인터입니다. 이 매개 변수는 다음 메시지 유형 중 하나일 수 있습니다.

  • CMSG_DATA
  • CMSG_SIGNED
  • CMSG_ENVELOPED
  • CMSG_SIGNED_AND_ENVELOPED
  • CMSG_HASHED

[out, optional] pdwInnerContentType

내부 메시지의 형식을 지정하는 DWORD 에 대한 포인터입니다. pdwMsgType에 사용되는 메시지 형식 코드도 여기에 사용됩니다.

암호화 중첩이 없으면 CMSG_DATA 반환됩니다.

[out, optional] pbDecoded

디코딩된 메시지를 받을 버퍼에 대한 포인터입니다.

디코딩된 메시지가 필요하지 않거나 메모리 할당을 위해 디코딩된 메시지의 크기를 설정하는 경우 이 매개 변수는 NULL 일 수 있습니다. 이 매개 변수가 NULL이면 디코딩된 메시지가 반환되지 않습니다. 자세한 내용은 알 수 없는 길이의 데이터 검색을 참조하세요.

[in, out, optional] pcbDecoded

pbDecoded 매개 변수가 가리키는 버퍼의 크기(바이트)를 지정하는 변수에 대한 포인터입니다. 함수가 반환될 때 이 변수에는 디코딩된 메시지의 크기가 포함됩니다.

참고 버퍼에서 반환된 데이터를 처리할 때 애플리케이션은 반환된 데이터의 실제 크기를 사용해야 합니다. 실제 크기는 입력에 지정된 버퍼 크기보다 약간 작을 수 있습니다. (입력에서 버퍼 크기는 일반적으로 가능한 가장 큰 출력 데이터가 버퍼에 맞도록 충분히 크게 지정됩니다.) 출력 시 이 매개 변수가 가리키는 변수는 버퍼에 복사된 데이터의 실제 크기를 반영하도록 업데이트됩니다.
 

[out, optional] ppXchgCert

메시지를 디코딩하는 데 필요한 프라이빗 교환 키에 해당하는 인증서가 있는 CERT_CONTEXT 구조체에 대한 포인터입니다. 이 매개 변수는 CMSG_ENVELOPED 및 CMSG_SIGNED_AND_ENVELOPED 메시지 유형에 대해서만 설정됩니다.

[out, optional] ppSignerCert

서명자의 인증서 컨텍스트의 CERT_CONTEXT 구조에 대한 포인터에 대한 포인터입니다. 이 매개 변수는 CMSG_SIGNED 및 CMSG_SIGNED_AND_ENVELOPED 메시지 유형에 대해서만 설정됩니다.

반환 값

함수가 성공하면 함수는 0이 아닌 값(TRUE)을 반환합니다.

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

CryptDecryptMessage, CryptVerifyMessageSignature 또는 CryptVerifyMessageHash 함수를 이 함수로 전파할 수 있습니다.

다음 오류 코드는 GetLastError 함수에서 가장 일반적으로 반환됩니다.

반환 코드 설명
ERROR_MORE_DATA
pbDecoded 매개 변수로 지정된 버퍼가 반환된 데이터를 저장할 만큼 크지 않은 경우 함수는 ERROR_MORE_DATA 코드를 설정하고 필요한 버퍼 크기를 pcbDecoded가 가리키는 변수에 바이트 단위로 저장합니다.

설명

dwMsgTypeFlags 매개 변수는 허용 가능한 메시지 집합을 지정합니다. 예를 들어 SIGNED 또는 ENVELOPED 메시지를 디코딩하려면 dwMsgTypeFlags 를 CMSG_SIGNED_FLAG | CMSG_ENVELOPED_FLAG. pDecryptPara 또는 pVerifyPara 매개 변수 중 하나 또는 둘 다를 지정해야 합니다.

성공적으로 디코딩되거나 확인된 메시지의 경우 ppXchgCertppSignerCert가 가리키는 인증서 컨텍스트 포인터가 업데이트됩니다. CertFreeCertificateContext를 호출하여 해제해야 합니다. 함수가 실패하면 NULL로 설정됩니다.

함수가 호출되기 전에 ppXchgCert 또는 ppSignerCert 매개 변수를 NULL 로 설정할 수 있습니다. 이는 호출자가 교환 인증서 또는 서명자 인증서 컨텍스트를 가져오는 데 관심이 없음을 나타냅니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Crypt32.lib
DLL Crypt32.dll

추가 정보

CryptDecryptMessage

CryptVerifyMessageHash

CryptVerifyMessageSignature

간소화된 메시지 함수