다음을 통해 공유


메시지 인코딩 및 디코딩 절차

일반 메시지를 인코딩하는 절차는 다음과 같습니다.

메시지를 인코딩하려면

  1. 원하는 데이터 형식에 적합한 데이터 구조를 초기화합니다.
  2. CryptMsgOpenToEncode를 호출하여 필요한 인수를 전달합니다. CryptMsgOpenToEncode를 호출할 때 CryptMsgUpdate에 제공될 데이터가 이미 메시지 인코딩된 경우 pszInnerContentObjID에서 적절한 개체 식별자를 전달합니다(예: szOID_RSA_signedData 경우 "1.2.840.113549.1.7.2"). pszInnerContentObjIDNULL인 경우 내부 콘텐츠 형식은 이전에 인코딩되지 않은 것으로 간주되며 적절하게 처리됩니다.
  3. 메시지를 완료하는 데 필요한 만큼 CryptMsgUpdate 를 호출합니다. 마지막 호출에서 fFinal 매개 변수를 TRUE로 설정합니다. 자세한 내용은 CryptMsgUpdate를 참조하세요.
  4. CryptMsgGetParam을 호출하여 콘텐츠와 같은 원하는 매개 변수에 대한 포인터를 가져옵니다. 간단한 일반 데이터를 인코딩하려면 dwParamtype에 CMSG_CONTENT_PARAM 사용합니다.
  5. CryptMsgClose를 호출하여 메시지를 닫습니다.

이 프로시저는 함수 호출에 지정된 형식의 인코딩된 메시지를 생성합니다.

일반 메시지를 디코딩하는 절차는 다음과 같습니다.

메시지를 디코딩하려면

  1. CryptMsgCalculateEncodedLength를 사용하여 인코딩된 데이터를 저장하기 위해 버퍼에 필요한 길이를 결정합니다.
  2. CryptMsgOpenToDecode를 호출하여 필요한 인수를 전달합니다. Internet Explorer 버전 3.0과의 호환성을 유지하기 위해 dwMsgType 매개 변수가 제공됩니다. 인터넷 Explorer 3.0에서 만든 서명된 데이터에는 헤더 정보가 포함되어 있지 않습니다. 따라서 이러한 메시지가 파일 서명에서 추출되는 경우 메시지 형식을 함수에 전달해야 합니다. dwMsgType 매개 변수에 0이 전달되면 함수는 메시지의 헤더에서 메시지 형식을 읽습니다. 헤더가 없으면 함수 호출이 실패합니다. 성공하면 열린 메시지에 대한 핸들이 반환됩니다.
  3. CryptMsgUpdate를 한 번 호출합니다. 이렇게 하면 메시지 유형에 따라 메시지에 대해 적절한 작업이 수행됩니다.
  4. 추가 암호 해독 또는 서명 확인과 같은 메시지의 추가 처리를 위해 CryptMsgControl을 호출하여 dwCtrlType에서 원하는 작업을 전달합니다.
  5. CryptMsgGetParam을 호출하여 콘텐츠와 같은 원하는 매개 변수에 대한 포인터를 가져옵니다. 간단한 일반 데이터를 디코딩하려면 dwParamtype 매개 변수에 CMSG_CONTENT_PARAM 사용합니다.
  6. CryptMsgClose를 호출하여 메시지를 닫습니다.

이러한 단계를 구현하는 예제는 예제 C 프로그램: 데이터 인코딩 및 디코딩을 참조하세요. 서명된 메시지의 서명을 인코딩, 디코딩 및 확인하는 프로세스를 보여 주는 절차 및 예제는 예제 C 프로그램: 서명, 인코딩, 디코딩 및 메시지 확인을 참조하세요.