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
[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 함수에서 가장 일반적으로 반환됩니다.
반환 코드 | 설명 |
---|---|
|
pbDecoded 매개 변수로 지정된 버퍼가 반환된 데이터를 저장할 만큼 크지 않은 경우 함수는 ERROR_MORE_DATA 코드를 설정하고 필요한 버퍼 크기를 pcbDecoded가 가리키는 변수에 바이트 단위로 저장합니다. |
설명
dwMsgTypeFlags 매개 변수는 허용 가능한 메시지 집합을 지정합니다. 예를 들어 SIGNED 또는 ENVELOPED 메시지를 디코딩하려면 dwMsgTypeFlags 를 CMSG_SIGNED_FLAG | CMSG_ENVELOPED_FLAG. pDecryptPara 또는 pVerifyPara 매개 변수 중 하나 또는 둘 다를 지정해야 합니다.
성공적으로 디코딩되거나 확인된 메시지의 경우 ppXchgCert 및 ppSignerCert가 가리키는 인증서 컨텍스트 포인터가 업데이트됩니다. CertFreeCertificateContext를 호출하여 해제해야 합니다. 함수가 실패하면 NULL로 설정됩니다.
함수가 호출되기 전에 ppXchgCert 또는 ppSignerCert 매개 변수를 NULL 로 설정할 수 있습니다. 이는 호출자가 교환 인증서 또는 서명자 인증서 컨텍스트를 가져오는 데 관심이 없음을 나타냅니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | wincrypt.h |
라이브러리 | Crypt32.lib |
DLL | Crypt32.dll |