应用程序使用Crypto API进行加密通讯的通常步骤以下: ui
1,include wincrypt.h 加密
2,调用CryptAcquireContext()得到某个CSP模块中的密钥容器(key container)的一个句柄; spa
3,发送方使用CryptImportKey()将接受方的证书导入CSP中,从而得到接收方的公钥; 对象
4,发送方式用CryptGenKey()随机产生一个会话密钥,且用对方的公钥对会话密钥进行加密, 资源
用CryptExportKey()将加密后的会话密钥导出而且发给对方; class
5,接收方收到会话密钥后,用本身的私钥调用CryptImportKey(),将会话密钥解出来; 容器
6,发送方用会话密钥调用CryptEncrypt()加密数据,而且发送给对方; 程序
7,接收方收到加密后的数据,用会话密钥调用CryptDecrypt(),对数据进行解密; 通信
8,通讯完毕,调用CryptDestroyKey()释听任何密钥句柄,再用CryptReleaseContext()释放CSP句柄。 数据
使用Crypto API进行数字签名及验证的通常步骤以下:
1,调用CryptAcquireContext()得到某个CSP模块中的密钥容器(key container)的一个句柄;
2,签名者调用CryptGerUserKey()获得用于签名的密钥,并用CryptExportKey()降其中的公钥输出,
以便收到数字签名的人对本身的签名进行验证;
3,签名者用CryptCreateHash()和CryptHashData()计算须要签名的数据散列值;
4,签名者用私钥调用CryptSignHash()给数据的散列值加上本身的签名;
5,负责验证签名的人在收到签名者发来的公钥、数据及签名后,先用CryptImportKey()将签名者的公钥导入密钥容器中;
6,验证者再签名者那样用CryptCreateHash()和CryptHashData()计算数据的散列值;
7,验证者用CryptVerifySignature()检查签名是否有效;
8,调用CryptDestroyHash()释放散列值对象,并调用CryptReleaseContext()释放最初的CSP句柄资源。