Windows平台下利用CSP来实现加密保护

CSP是Cryptographic Service Provider的简写,是微软专为 Windows系列操作系统制定的底层加密接口,用于管理硬件或软件形式的加密设备,实现数据加密、解密,数字签名、验证和数据摘要 (HASH)等。
 
本例实现了几方面的操作
 
1.对容器的操作
包括创建,打开,关闭,销毁容器.
Provider可以对应于一个硬件UKey或者软件虚拟容器,微软提供了几个缺省的Provider,每个Provider里面都可以包含若干容器(Container).
微软提供的Provider:
  • PROV_RSA_FULL
  • PROV_RSA_SIG
  • PROV_DSS
  • PROV_DSS_DH
  • PROV_FORTEZZA
  • PROV_MS_EXCHANGE
  • PROV_RSA_SCHANNEL
  • PROV_SSL
  • PROV_EC_ECDSA_SIG
  • PROV_EC_ECNRA_SIG
  • PROV_EC_ECDSA_FULL
  • PROV_EC_ECNRA_FULL
  • PROV_SPYRUS_LYNKS
  • PROV_RNG
  • PROV_INTEL_SEC
2.生成随机数
3.在容器中生成密钥,包括RSA加密密钥对,RSA签名密钥对.
4.RSA加密非对称加密用于加密少量,对安全性要求比较高的数据.
5.签名,验签,RSA公钥的导出(可以用于验证签名).用于验证身份.
6.HASH,HMAC.用于验证数据完整性
7.对称加解密.加密数据,速度快.
8.保护本机数据:不需要CSP句柄,和容器无关,生成只能在本机才能解密的数据.可以防止本机数据被Copy.
 
9
这里有一种方法比较有意思
有一个这样的需求,我会调用一些函数,然后希望每次调用后弹出弹出信息告诉我此次调用的函数名字,调用结果
a)定义一个函数,负责弹出信息,它输入参数为函数名字和函数的返回结果
VOID CCSPDlg::PopupMessage(LPCTSTR lpFunction, BOOL bResult, BOOL bAddLastErrorMsg/*= TRUE*/)
{
    CString strInfo;
    TCHAR szErrMsg[MAX_PATH] = {0};
    if(bAddLastErrorMsg)
        SSOSGetCodeDesc(::GetLastError(), szErrMsg, SS_DIMOF(szErrMsg), NULL);
    if(bResult)
    {
        strInfo.Format(_T("Execute %s Success.\r\n %s"),lpFunction, szErrMsg);
    }else
    {
        strInfo.Format(_T("Execute %s Failed.\r\n %s"),lpFunction, szErrMsg);
    }
    AfxMessageBox(strInfo);
}
b)定义一个宏
#define CALL_FUNC_OF_RLT_BY_BOOL(F) PopupMessage(TEXT(#F), F)
 
c)应用场景
    CALL_FUNC_OF_RLT_BY_BOOL( (m_hCryptProv = SSCSPCreateContainer(NULL, NULL)) != NULL);
    CALL_FUNC_OF_RLT_BY_BOOL(SSCSPCloseContainer(m_hCryptProv));
 
SOURCE CODE : http://download.csdn.net/detail/patdz/4280531

你可能感兴趣的:(加密,windows,解密,null,Exchange,平台)