对数据进行签名的过程

单个函数 CryptSignMessage 执行 创建签名消息中列出的所有任务。 但是,仍需要初始化结构和其他数据。 下图显示了指向结构或数组的函数参数与其初始化数据之间的关系。 此图仅显示派生自其他结构或函数的函数参数和结构成员。 其余参数是简单的初始化。

调用 cryptsignmessage 的初始化映射

使用 CryptSignMessage 对数据进行签名

  1. 获取指向要签名的数据的指针。
  2. 将指向数据的指针分配给“要签名的数据”数组的索引零。
  3. 获取加密提供程序的句柄。
  4. 打开包含签名者证书的证书 存储
  5. 获取签名者证书的地址。
  6. 将证书的地址分配给 MsgCert 数组的零索引。
  7. 将消息中包含的任何其他证书的地址分配给 MsgCert 数组。
  8. 初始化 CRYPT_ALGORITHM_IDENTIFIER 结构,将 pszObjId 成员初始化为所需的哈希算法,并根据需要初始化其他成员。
  9. 初始化 CRYPT_SIGN_MESSAGE_PARA 结构,将 pSigningCert 成员初始化为签名者证书的地址, 将 MsgCert 数组成员初始化为签名者和其他证书的地址, 将 HashAlgorithm 成员初始化为 CRYPT_ALGORITHM_IDENTIFIER 结构的地址,并根据需要初始化其他成员。
  10. 调用 CryptSignMessage 函数,传递 pSignPara 参数的 CRYPT_SIGN_MESSAGE_PARA 结构、rgpbToBeSigned 参数的“待签名数据”数组的地址、pbSignedBlob 输出参数的地址以及其他参数的值(如果适用)。