CryptoAPI是微软提供的一组加密函数,其功能是为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。CryptoAPI处于应用程序和密码服务提供者CSP之间。CryptoAPI的编程模型和Windows系统的图形设备接口GDI类似,其中的CSP相当于图形设备驱动程序,加密硬件等同于图形硬件。
每个CSP都是一个独立的模块,可以执行所有的密码操作。CSP负责创建和销毁密钥并提供各种密码操作,每个CSP提供不同的CryptoAPI实现,并通过CSP名称来区别。CSP可以由软件实现,也可以由硬件实现,比如常见的USBKEY等。
CSP是Windows安全应用的基础,在Windows操作系统上,HTTPS安全浏览(即SSL安全数据通信)、安全隧道(如Ipsec)、安全电子邮件、Windows智能卡登录等,都必须有CSP参与密码运算。
CryptoAPI由简单消息函数、低层消息函数、基本加密函数、证书编解码函数和证书库管理函数5部分组成。其中前三者可用于对敏感信息进行加密或签名处理,从而保证网络传输信息的保密、防篡改、防抵赖等;后两者是对证书的操作,实现身份的认证。
搭建CryptoAPI环境很简单,只需要包含wincrypt.h头文件,同时链接Crypto32.lib库即可。具体步骤如下:
1)新建Visual C++2008 Win32 console工程CryptoTest。
2)在CryptoTest.cpp文件中的main函数添加代码如下:
#include "stdafx.h"
#include <windows.h>
#include <wincrypt.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
HCRYPTPROV hCryptProv;
char ErrInfo[1024];
if(!CryptAcquireContext(&hCryptProv,
NULL, NULL, PROV_RSA_FULL,
CRYPT_SILENT | CRYPT_VERIFYCONTEXT))
{
sprintf(ErrInfo, "###CryptAcquireContext Error: ErrorCode:0x%x", GetLastError());
printf("%s/n", ErrInfo);
return -1;
}
printf("运行正常/n");
CryptReleaseContext(hCryptProv, 0);
system("pause");
return 0;
}
3)在项目的配置属性中的链接器/输入中的附加依赖项中添加“Crypto32.lib”库。
4)编译该项目即可。
参考文献:《精通PKI网络安全认证技术与编程实现》