应用程序使用CryptSignHash和CryptVerifySignature函数对哈希值进行签名/验证。应用程序通常指定一个描述字符串,它必须在签名/验证之前添加到哈希对象。
签名过程通常是这样的:
应用程序使用CryptCreateHash创建一个哈希对象。
2.应用程序使用CryptHashData和/或CryptHashSessionKey将数据添加到散列对象。
3.应用程序调用{??989796024}函数对哈希值进行签名,指定描述字符串。
4.操作系统层接受CryptSignHash调用,将描述字符串转换为Unicode(如果不是Unicode),然后通过CPSignHash功能将任务转交给CSP。
5.CSP通过CPHashData功能将Unicode描述字符串添加到散列对象。终止空字符是【不】散列。
6.CSP完成散列,并使用CPGetHashParam函数获取要签名的哈希值。
7.CSP采用哈希值,将其填充到公钥模数的大小,并使用签名私钥对其进行加密。
哈希值周围的填充必须采用由RSA Data Security提供的公开密钥加密标准(PKCS)指定的格式。所使用的散列算法必须按照PKCS#1,第6.3节中的描述进行编码。
8.然后,签名块通过操作系统层返回到应用程序。