CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
来源:互联网 发布:2017年云计算系统集成 编辑:程序博客网 时间:2024/06/05 20:15
from http://blog.csdn.net/yyfzy/article/details/46424731
CSP,全名为“加密服务提供者(Cryptographic Service Provider)”,是微软定义的一套密码服务API。
目前,常用的密码规范或者标准有3套:CSP,PKCS#11 和 国密标准。前两者主要是为RSA算法提供服务,当然PKCS#11最新的扩展也开始支持ECC算法。而国家密码管理制定的国密标准,主要提供SM2(实际上也是ECC)服务,当然国密标准同时支持RSA,不过大多数情况下RSA的应用还是使用CSP和PKCS#11来实现。
一、CSP为一个独立的密钥服务模块
CSP可以是软件,比如Windows自带的“Microsoft Base Cryptographic Provider v1.0”和“Microsoft Enhanced Cryptographic Provider v1.0”。
CSP也可以是硬件设备,通常是USBKey,比如飞天诚信等厂商生产的。
二、一个CSP对应一个密钥容器
CSP没有设备(Key)的概念,这点和PKCS11以及国密规范都不一样。一个CSP直接对应一个密钥容器。通过CSP名和容器名直接定位密钥模块,如果不指定容器名,则是定位缺省的容器(一般情况下为第一个容器)。所以对CSP来说,最好容器名要求唯一,一般是使用GUID来作为容器名的。
如果同一个CSP有多个设备,在需要确定使用哪个设备时(比如新建容器),CSP会弹出选择框,根据设备的SN来选择使用哪个设备。
三、一个密钥容器可以包含一对签名密钥、一对加密钥、一个签名证书以及一个加密证书
通常CSP的一个密钥容器只包含一对密钥对和对应的证书,但是理论上可以把签名密钥对和加密密钥对放在同一个容器,然后通过AT_SIGNATURE和AT_KEYEXCHANGE来查找密钥。
四、枚举系统中的CSP
系统中的CSP,都在注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider目录下,我们可以通过API:CryptEnumProviders()来枚举想要的CSP,如下面代码所示:
五、获取CSP属性
得到CSP句柄之后,可以通过API:CryptGetProvParam()获取CSP的属性,比如该CSP具有的容器名、实现类型、支持算法等等。
比如下面的代码为获取当前CSP使用的容器名:
下面的代码枚举CSP所有的容器名:
等等。
如果需要详细代码,请下载本人枚举CSP的例子,下载连接为:枚举CSP并获取属性
- CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
- CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
- CSP:使用CryptoAPI获取X509证书的HASH(指纹)值
- CSP:使用CryptoAPI解码X509证书内容
- CSP:使用CryptoAPI解码X509证书内容
- CSP:使用CryptoAPI解析X509证书基本项
- CSP:使用CryptoAPI解析X509证书基本项
- CSP
- CSP
- 用CSP枚举UKey
- CSP开发基础--CryptoAPI函数简介
- CSP开发基础--CryptoAPI函数简介
- CSP开发基础--CryptoAPI函数简介
- CSP开发基础--CryptoAPI函数简介
- 列举出系统中的CSP、CSP类型以及默认CSP
- CSP接口函数介绍
- CSP接口函数介绍
- CSP枚举工具的整理
- 动态存储区、静态存储区、堆和栈的区别
- 初探Lambda表达式-Java多核编程【0】从外部迭代到内部迭代
- Windows下安装redis服务、搭建redis主从复制
- Linux - 进程调度算法
- POJ 1422 && ZOJ 1525 Air Raid(最小路径覆盖)
- CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
- Tomcat Connector组件
- Hibernate乐观锁和悲观锁
- servlet学习之servlet中cookie和session的介绍
- Windows下搭建Latex中文环境
- rex-ray 0.7.0支持对接ceph/rbd
- AtomicInteger类的理解与使用
- android显示布局边界查看布局
- eclipse安装插件