CryptoAPI 培训教程
CryptoAPI 培训教程
项目名称:无 开发部门:无
项目编号:无 密 级:无
作 者:Ady Lee 版 本:1.2
编写日期:2002-3-1 审 核:无
电子邮件:adylee@sina.com
更新记录
修改人 修改日期 修改对象 备注(原因、进一步的说明等)
Ady Lee 2002-3-1
整篇 • 丰富内容
Ady Lee 2002-3-11
整篇 • 丰富内容
Ady Lee 2003-9-29
整篇 • 整理
CryptoAPI 培训教程
- 2 -
目录
1 前言..................................................................................................................................................3
2 目的..................................................................................................................................................3
3 新功能.............................................................................................................................................. 3
4 CRYPTOAPI ..................................................................................................................................3
4.1 基本加密函数 .........................................................................................................................3
4.1.1
服务提供者函数
............................................................................................................. 4
4.1.2
密钥的产生和交换函数
................................................................................................. 4
4.1.3
编码
/
解码函数
................................................................................................................ 5
4.1.4
数据加密
/
解密函数
........................................................................................................ 5
4.1.5
哈希和数字签名函数
..................................................................................................... 5
4.1.6
函数详解
......................................................................................................................... 6
4.2 证书和证书库函数 ...............................................................................................................24
4.2.1
证书库函数
................................................................................................................... 24
4.2.2
维护函数
....................................................................................................................... 24
4.2.3
证书函数
....................................................................................................................... 24
4.2.4
证书撤销列表函数
....................................................................................................... 25
4.2.5
证书信任列表函数
....................................................................................................... 26
4.2.6
扩展属性函数
............................................................................................................... 26
4.2.7
函数详解
....................................................................................................................... 26
4.3 证书验证函数 .......................................................................................................................27
4.3.1
使用
CTL
的函数
.......................................................................................................... 28
4.3.2
证书链验证函数
........................................................................................................... 28
4.4 消息函数 ...............................................................................................................................28
4.4.1
低级消息函数
............................................................................................................... 28
4.4.2
简化消息函数
............................................................................................................... 29
4.5 辅助函数 ...............................................................................................................................29
4.5.1
数据管理函数
............................................................................................................... 29
4.5.2
数据转换函数
............................................................................................................... 30
4.5.3
增强密钥用法函数
....................................................................................................... 30
4.5.4
密钥标示函数
............................................................................................................... 31
4.5.5
证书库回调函数
........................................................................................................... 31
4.5.6 OID
支持函数
................................................................................................................... 31
4.5.7
远程对象恢复函数
....................................................................................................... 32
4.5.8 PFX
函数
........................................................................................................................... 32
5 待续................................................................................................................................................32
CryptoAPI 培训教程
- 3 -
1 前言
事隔 1 年有余,重新整理此文档,感触颇深。冷眼旁观 MS 的 CryptoAPI 飞速发展,
如今的 CAPI 已趋于稳定。MS 还在 CryptoAPI 的基础上封装了一个 CAPICOM(目前版本
2.0),以供其他语言使用。
创建此文档是一年前,当时由于工作需要在 Windows 上写一个桌面安全的软件,所以
接触到了 CryptoAPI,顺便自己写了一个教程以备以后使用。由于当初对 CAPI 认识有限,
文档中难免会有错误和不足,不过以后我会不断的来更新和维护这个文档,以迎合 MS CAPI
的发展,也希望各位朋友能够一如既往的支持我。
由于工作之余匆忙整理,文档中难免有错误和遗漏,欢迎广大读者批评指正。作者信箱
为 adylee@sina.com
。
2 目的
CryptoAPI(一个应用程序编程接口)目的就是提供开发者在 Windows 下使用 PKI 的编
程接口。CryptoAPI 提供了很多函数,包括编码、解码、加密、解密、哈希、数字证书、
证书管理和证书存储等功能。对于加密和解密,CryptoAPI 同时提供基于会话密钥和公
钥/私钥对的方法。
3 新功能
CryptoAPI 2.0 提供了用于密码学的函数。2.0 版本包括了基本加密函数。这些函数提供
了大部分安全通讯的重要方面——秘密性和完整性。
其它重要的方面是认证——要保证发送者和接收者身份的确定性。一种方法就是使用数
字证书,有一种趋势就是要把证书合并到安全通讯中。CryptoAPI 2.0 中提供了管理和使用
证书的函数,另外,2.0 版本中也提供了编码和解码 PKCS#7(ASN.1)消息。
证书管理函数维护和管理了一个证书的可持续库——证书库。CryptoAPI 2.0 在两个级
别上加入了消息管理函数——低级消息函数和简化消息函数。低级消息函数比简化消息函数
更加富有弹性,但也需要更多的函数调用。
4 CryptoAPI
4.1 基本加密函数
基本加密函数为开发加密应用程序提供了足够灵活的空间。所有 CSP 的通讯都是通过
这些函数。
一个 CSP 是实现所有加密操作的独立模块。在每一个应用程序中至少需要提供一个 CSP
来完成所需的加密操作。
CryptoAPI 培训教程
- 4 -
如果使用多于一个以上的 CSP,在加密函数调用中就要指定所需的 CSP。微软基本加密
提供者(Microsoft Base Cryptographic Provider),是缺省绑定到 CryptoAPI 里的。如果没有
指定其他 CSP 时,这个 CSP 就是却省的。
每一个 CSP 对 CryptoAPI 提供了一套不同的实现。一些提供了更加强大的加密算法,
而其他一些 CSP 包含了对硬件的支持,比如智能卡。另外,一些 CSP 偶尔和使用者直接通
讯,比如数字签名就使用了用户的签名私钥。
基本加密函数包含了以下几种:
4.1.1 服务提供者函数
应用程序使用服务提供者函数来连接和断开一个 CSP。下面就是主要的 API:
CryptAcquireContext
获得指定 CSP 的密钥容器的句柄
CryptContextAddRef
对 HCRYPTPROV 句柄增加一个应用计数
CryptEnumProviders
枚举当前计算机中的 CSP
CryptEnumProviderTypes
枚举 CSP 的类型
CryptGetDefaultProvider
对于指定 CSP 类型的却省 CSP
CryptGetProvParam
得到一个 CSP 的属性
CryptInstallDefaultContext
安装先前得到的 HCRYPTPROV 上下文作为当前却省的上
下文
CryptReleaseContext
释放由 CryptAcquireContext 得到的句柄
CryptSetProvider 和
CryptSetProviderEx
为指定 CSP 类型指定一个却省的 CSP
CryptSetProvParam
指定一个 CSP 的属性
CryptUninstallDefaultContext
删除先前由 CryptInstallDefaultContext 安装的却省上下文
4.1.2 密钥的产生和交换函数
密钥产生函数创建、配置和销毁加密密钥。他们也用于和其他用户进行交换密钥。下面
就是主要的一些函数:
CryptAcquireCertificatePrivateKey
对于指定证书上下文得到一个 HCRYPTPROV 句柄和
dwKeySpec
CryptDeriveKey
从一个密码中派生一个密钥
CryptDestoryKey
销毁密钥
CryptDuplicateKey
制作一个密钥和密钥状态的精确复制
CryptExportKey
把 CSP 的密钥做成 BLOB 传送到应用程序的内存空间
中
CryptGenKey
创建一个随机密钥
CryptGenRandom
产生一个随机数
CryptGetKeyParam
得到密钥的参数
CryptGetUserKey
得到一个密钥交换或签名密钥的句柄
CryptoAPI 培训教程
- 5 -
CryptImportKey
把一个密钥 BLOB 传送到 CSP 中
CryptSetKeyParam
指定一个密钥的参数
4.1.3 编码/解码函数
有一些编码/解码函数,他们可以用来对证书、证书撤销列表、证书请求和证书扩展进
行编码和解码。
以下就是这几个函数:
CryptDecodeObject
对 lpszStructType 结构进行解码
CryptDecodeObjectEx
对 lpszStructType 结构进行解码,此函数支持内存分配
选项
CryptEncodeObject
对 lpszStructType 结构进行编码
CyptEncodeObjectEx
对 lpszStructType 结构进行编码,此函数支持内存分配
选项
4.1.4 数据加密/解密函数
这些函数支持数据的加密/解密操作。CryptEncrypt 和 CryptDecrypt 要求在被调用前指定
一个密钥。这个密钥可以由 CryptGenKey、CryptDeriveKey 或 CryptImportKey 产生。创建密
钥时要指定加密算法。CryptSetKeyParam 函数可以指定额外的加密参数。
CryptDecrypt
使用指定加密密钥来解密一段密文
CryptEncrypt
使用指定加密密钥来加密一段明文
CryptProtectData
执行对 DATA_BLOB 结构的加密
CryptUnprotectData
执行对 DATA_BLOB 结构的完整性验证和解密
4.1.5 哈希和数字签名函数
这些函数在应用程序中完成计算哈希、创建和校验数字签名。
CryptCreateHash
创建一个空哈希对象
CryptDestoryHash
销毁一个哈希对象
CryptDuplicateHash
复制一个哈希对象
CryptGetHashParam
得到一个哈希对象参数
CryptHashData
对一块数据进行哈希,把它加到指定的哈希对象中
CryptHashSessionKey
对一个会话密钥进行哈希,把它加到指定的哈希对象
中
CryptSetHashParam
设置一个哈希对象的参数
CryptSignHash
对一个哈希对象进行签名
评论1