解码信封数据
解码信封邮件所需的常规任务在下图中进行了描述,并在后面的列表中进行了说明。
使用密钥传输密钥管理解码信封数据的事件序列如下图所示:
- 将检索指向 数字信封 邮件的指针。
- 证书 存储 区已打开。
- 从邮件中,将检索收件人 ID (“我的 ID”) 。
- 收件人 ID 用于检索证书。
- 检索与该证书关联的 私钥 。
- 私钥用于解密 对称 (会话) 密钥。
- 从消息中检索加密算法。
- 使用私钥和加密算法解密数据。
以下过程使用低级别消息函数来完成刚刚列出的任务。
解码信封邮件
- 获取指向编码 BLOB 的指针。
- 调用 CryptMsgOpenToDecode,传递必要的参数。
- 调用 CryptMsgUpdate 一次,传入步骤 2 中检索的句柄,以及指向要解码的数据的指针。 这会导致对消息执行相应的操作,具体取决于消息类型。
- 调用 CryptMsgGetParam,传入步骤 2 中检索的句柄,并CMSG_TYPE_PARAM验证消息是否为信封数据类型。
- 再次调用 CryptMsgGetParam,传入CMSG_INNER_CONTENT_TYPE_PARAM以获取 内部内容的数据类型。
- 如果内部内容数据类型为 数据,请继续解密和解码内容。 否则,请运行适用于内容类型的解码过程。
- 假设内部内容类型为“data”,初始化CMSG_CTRL_DECRYPT_PARA数据结构,并调用 CryptMsgControl,传入CMSG_CTRL_DECRYPT和结构地址。 内容将被解密。
- 调用 CryptMsgGetParam,传入CMSG_CONTENT_PARAM以获取指向解码的内容数据 BLOB (BYTE 字符串) 的指针。
- 调用 CryptMsgClose 关闭消息。
此过程的结果是对消息进行解码和解密,并将指针检索到内容数据 BLOB。
相关主题