봉투 데이터 디코딩
봉투형 메시지를 디코딩하는 데 필요한 일반적인 작업은 다음 그림에 나와 있으며 그 다음 목록에 설명되어 있습니다.
이전 그림과 같이 키 전송 키 관리를 사용하여 봉투형 데이터를 디코딩하는 이벤트 시퀀스는 다음과 같습니다.
- 디지털 봉투 메시지에 대한 포인터가 검색됩니다.
- 인증서 저장소가 열립니다.
- 메시지에서 받는 사람 ID(내 ID)가 검색됩니다.
- 받는 사람 ID는 인증서를 검색하는 데 사용됩니다.
- 해당 인증서와 연결된 프라이빗 키가 검색됩니다.
- 프라이빗 키는 대칭 (세션) 키의 암호를 해독하는 데 사용됩니다.
- 암호화 알고리즘은 메시지에서 검색됩니다.
- 프라이빗 키 및 암호화 알고리즘을 사용하여 데이터의 암호가 해독됩니다.
다음 절차에서는 하위 수준 메시지 함수를 사용하여 방금 나열된 작업을 수행합니다.
봉투 메시지를 디코딩하려면
- 인코딩된 BLOB에 대한 포인터를 가져옵니다.
- CryptMsgOpenToDecode를 호출하여 필요한 인수를 전달합니다.
- CryptMsgUpdate를 한 번 호출하여 2단계에서 검색된 핸들과 디코딩할 데이터에 대한 포인터를 전달합니다. 이렇게 하면 메시지 유형에 따라 메시지에 대해 적절한 작업이 수행됩니다.
- CryptMsgGetParam을 호출하여 2단계에서 검색된 핸들을 전달하고 CMSG_TYPE_PARAM 메시지가 봉투형 데이터 형식인지 확인합니다.
- 다시 CryptMsgGetParam을 호출하고 CMSG_INNER_CONTENT_TYPE_PARAM 전달하여 내부 콘텐츠의 데이터 형식을 가져옵니다.
- 내부 콘텐츠 데이터 형식이 데이터인 경우 콘텐츠를 해독하고 디코딩합니다. 그렇지 않으면 콘텐츠 데이터 형식에 적합한 디코딩 프로시저를 실행합니다.
- 내부 콘텐츠 형식이 "데이터"라고 가정하고 CMSG_CTRL_DECRYPT_PARA 데이터 구조를 초기화하고 CryptMsgControl을 호출하여 CMSG_CTRL_DECRYPT 및 구조체의 주소를 전달합니다. 콘텐츠의 암호가 해독됩니다.
- CryptMsgGetParam을 호출하여 CMSG_CONTENT_PARAM 전달하여 디코딩된 콘텐츠 데이터 BLOB(BYTE 문자열)에 대한 포인터를 가져옵니다.
- CryptMsgClose를 호출하여 메시지를 닫습니다.
이 절차의 결과는 메시지가 디코딩 및 암호 해독되고 포인터가 콘텐츠 데이터 BLOB에 검색된다는 것입니다.
관련 항목