다음을 통해 공유


봉투 데이터 디코딩

봉투형 메시지를 디코딩하는 데 필요한 일반적인 작업은 다음 그림에 나와 있으며 그 다음 목록에 설명되어 있습니다.

봉투 데이터 디코딩

이전 그림과 같이 키 전송 키 관리를 사용하여 봉투형 데이터를 디코딩하는 이벤트 시퀀스는 다음과 같습니다.

  • 디지털 봉투 메시지에 대한 포인터가 검색됩니다.
  • 인증서 저장소가 열립니다.
  • 메시지에서 받는 사람 ID(내 ID)가 검색됩니다.
  • 받는 사람 ID는 인증서를 검색하는 데 사용됩니다.
  • 해당 인증서와 연결된 프라이빗 키가 검색됩니다.
  • 프라이빗 키는 대칭 (세션) 키의 암호를 해독하는 데 사용됩니다.
  • 암호화 알고리즘은 메시지에서 검색됩니다.
  • 프라이빗 키 및 암호화 알고리즘을 사용하여 데이터의 암호가 해독됩니다.

다음 절차에서는 하위 수준 메시지 함수를 사용하여 방금 나열된 작업을 수행합니다.

봉투 메시지를 디코딩하려면

  1. 인코딩된 BLOB에 대한 포인터를 가져옵니다.
  2. CryptMsgOpenToDecode를 호출하여 필요한 인수를 전달합니다.
  3. CryptMsgUpdate를 한 번 호출하여 2단계에서 검색된 핸들과 디코딩할 데이터에 대한 포인터를 전달합니다. 이렇게 하면 메시지 유형에 따라 메시지에 대해 적절한 작업이 수행됩니다.
  4. CryptMsgGetParam을 호출하여 2단계에서 검색된 핸들을 전달하고 CMSG_TYPE_PARAM 메시지가 봉투형 데이터 형식인지 확인합니다.
  5. 다시 CryptMsgGetParam을 호출하고 CMSG_INNER_CONTENT_TYPE_PARAM 전달하여 내부 콘텐츠의 데이터 형식을 가져옵니다.
  6. 내부 콘텐츠 데이터 형식이 데이터인 경우 콘텐츠를 해독하고 디코딩합니다. 그렇지 않으면 콘텐츠 데이터 형식에 적합한 디코딩 프로시저를 실행합니다.
  7. 내부 콘텐츠 형식이 "데이터"라고 가정하고 CMSG_CTRL_DECRYPT_PARA 데이터 구조를 초기화하고 CryptMsgControl을 호출하여 CMSG_CTRL_DECRYPT 및 구조체의 주소를 전달합니다. 콘텐츠의 암호가 해독됩니다.
  8. CryptMsgGetParam을 호출하여 CMSG_CONTENT_PARAM 전달하여 디코딩된 콘텐츠 데이터 BLOB(BYTE 문자열)에 대한 포인터를 가져옵니다.
  9. CryptMsgClose를 호출하여 메시지를 닫습니다.

이 절차의 결과는 메시지가 디코딩 및 암호 해독되고 포인터가 콘텐츠 데이터 BLOB에 검색된다는 것입니다.

예제 C 프로그램: 봉투에 담기고 서명된 메시지 인코딩