CryptoAPI为开发者提供在Windows下使用PKI的API。CryptoAPI包括编码、解码、加密、解密、Hash、数字证书管理和证书存储等功能。
常用API
CSP相关
一个CSP是实现加密操作的独立模块,要实现加密,至少需要一个CSP。每个CSP对CryptAPI的实现是不同的,使用的算法不同,有些包含了对硬件的支持。
CryptAcquireContext获得指定CSP的密钥容器的句柄CryptReleaseContext释放由CryptAcquireContext得到的句柄
密钥相关
用来创建和销毁密钥,也可以使用一个已有的密钥
CryptDeriveKey从一个密码中派生一个密钥CryptDestoryKey销毁密钥CryptDuplicateKey制作一个密钥和密钥状态的精确复制CryptGenKey创建一个随机密钥CryptImportKey把一个密钥BLOB传送到CSP中
加解密相关
用来加解密数据,需要指定一个密钥,这个密钥可以是由CryptGenKey、CryptDuplicateKey、CryptImportKey产生。
CryptEncrypt使用指定加密密钥来加密一段信息CryptDecrypt使用指定加密密钥来解密一段密文
哈希和数字签名函数
用来计算Hash、创建和校验数字签名。
CryptCreateHash创建一个空哈希对象CryptDestoryHash销毁一个哈希对象CryptDuplicateHash复制一个哈希对象CryptGetHashParam得到一个哈希对象参数CryptHashData对一块数据进行哈希,把它加到指定的哈希对象中CryptHashSessionKey对一个会话密钥进行哈希,把它加到指定的哈希对象中CryptSetHashParam设置一个哈希对象的参数CryptSignHash对一个哈希对象进行签名CryptVerifySignature校验一个数字签名
示例
1 |
|
实际应用时
- 应该加上每个步骤成功与否的检查、错误处理。
- 当要加解密的数据很长时,通常会把数据分多个块进行加解密,此时就需要计算是否是最后一个块,改变传入的参数。
- 如果要使用文件来保存、处理加解密后的数据,可以使用Base64编码,使得数据全部都是可见字符,以防止文件写入时遇到某些不可见字符被截断。