일반 메시지를 인코딩하는 절차는 다음과 같습니다.
메시지 인코딩하려면
- 원하는 데이터 형식에 적합한 데이터 구조를 초기화합니다.
- CryptMsgOpenToEncode호출하여 필요한 인수를 전달합니다. CryptMsgOpenToEncode를 호출할 때, CryptMsgUpdate 에 제공될 데이터가 이미 메시지 인코딩된 경우, 적절한 개체 식별자를 pszInnerContentObjID 에 전달합니다 (예: szOID_RSA_signedData의 경우 "1.2.840.113549.1.7.2"). pszInnerContentObjID NULL 경우 내부 콘텐츠 형식은 이전에 인코딩되지 않은 것으로 간주되어 적절하게 처리됩니다.
- CryptMsgUpdate를 메시지를 완료하는 데 필요한 횟수만큼 호출합니다. 마지막 호출에서 fFinal 매개 변수를 TRUE 설정합니다. (자세한 내용은 CryptMsgUpdate참조).
- CryptMsgGetParam 호출하여 콘텐츠와 같은 원하는 매개 변수에 대한 포인터를 가져옵니다. 간단한 일반 데이터를 인코딩하려면 dwParamtypeCMSG_CONTENT_PARAM 사용합니다.
- CryptMsgClose호출하여 메시지를 닫습니다.
이 프로시저는 함수 호출에 지정된 형식의 인코딩된 메시지를 생성합니다.
일반 메시지를 디코딩하는 절차는 다음과 같습니다.
메시지 디코딩하려면
- CryptMsgCalculateEncodedLength사용하여 버퍼가 인코딩된 데이터를 보관하는 데 필요한 길이를 결정합니다.
- CryptMsgOpenToDecode호출하여 필요한 인수를 전달합니다. Internet Explorer 버전 3.0과의 호환성을 유지하기 위해 dwMsgType 매개 변수가 제공됩니다. Internet Explorer 3.0에서 만든 서명된 데이터에는 헤더 정보가 포함되지 않습니다. 따라서 파일 서명에서 이러한 메시지를 추출하는 경우 메시지 형식을 함수에 전달해야 합니다. dwMsgType 매개 변수에 0이 전달되면 함수는 메시지의 헤더에서 메시지 유형을 읽습니다. 헤더가 없으면 함수 호출이 실패합니다. 성공하면 열려 있는 메시지에 대한 핸들이 반환됩니다.
- CryptMsgUpdate 한 번 호출합니다. 이렇게 하면 메시지 유형에 따라 메시지에 대한 적절한 작업이 수행됩니다.
- 추가 암호 해독 또는 서명 확인과 같은 메시지의 추가 처리를 위해 CryptMsgControl호출하여 dwCtrlType원하는 작업을 전달합니다.
- CryptMsgGetParam 호출하여 콘텐츠와 같은 원하는 매개 변수에 대한 포인터를 가져옵니다. 간단한 일반 데이터를 디코딩하려면 dwParamtype 매개 변수에 CMSG_CONTENT_PARAM 사용합니다.
- CryptMsgClose 호출하여 메시지를 닫습니다.
이러한 단계를 구현하는 예제는 예제 C 프로그램: 데이터인코딩 및 디코딩을 참조하세요. 서명된 메시지의 인코딩, 디코딩 및 확인 프로세스를 보여 주는 절차 및 예제는 서명, 인코딩, 디코딩 및 메시지 확인 예제 C 프로그램을 참조하세요.