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

14 篇文章 0 订阅
1 篇文章 0 订阅
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));
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值