对数据进行签名的过程
单个函数 CryptSignMessage 执行 创建签名消息中列出的所有任务。 但是,仍需要初始化结构和其他数据。 下图显示了指向结构或数组的函数参数与其初始化数据之间的关系。 此图仅显示派生自其他结构或函数的函数参数和结构成员。 其余参数是简单的初始化。
使用 CryptSignMessage 对数据进行签名
- 获取指向要签名的数据的指针。
- 将指向数据的指针分配给“要签名的数据”数组的索引零。
- 获取加密提供程序的句柄。
- 打开包含签名者证书的证书 存储 。
- 获取签名者证书的地址。
- 将证书的地址分配给 MsgCert 数组的零索引。
- 将消息中包含的任何其他证书的地址分配给 MsgCert 数组。
- 初始化 CRYPT_ALGORITHM_IDENTIFIER 结构,将 pszObjId 成员初始化为所需的哈希算法,并根据需要初始化其他成员。
- 初始化 CRYPT_SIGN_MESSAGE_PARA 结构,将 pSigningCert 成员初始化为签名者证书的地址, 将 MsgCert 数组成员初始化为签名者和其他证书的地址, 将 HashAlgorithm 成员初始化为 CRYPT_ALGORITHM_IDENTIFIER 结构的地址,并根据需要初始化其他成员。
- 调用 CryptSignMessage 函数,传递 pSignPara 参数的 CRYPT_SIGN_MESSAGE_PARA 结构、rgpbToBeSigned 参数的“待签名数据”数组的地址、pbSignedBlob 输出参数的地址以及其他参数的值(如果适用)。