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编码,使得数据全部都是可见字符,以防止文件写入时遇到某些不可见字符被截断。