CSP加密服务(一)

简介: (一)  加密服务提供程序 缩写为:CSP,全称为:Cryptographic Service Provider 即加密服务提供者。它是windows系统中提供的用于加密的软硬件组件。通过对微软的加密应用程序接口即CrytoAPI(或CAPI)的编程访问它来提供身份验证、编码和各种的加密、签名算法。

 

(一)  加密服务提供程序

缩写为:CSP,全称为:Cryptographic Service Provider 即加密服务提供者。它是windows系统中提供的用于加密的软硬件组件。通过对微软的加密应用程序接口即CrytoAPI(或CAPI)的编程访问它来提供身份验证、编码和各种的加密、签名算法。

如下图:

 

应用程序不是直接与某个CSP通信。它会调用CAPI的函数,然后操作系统通过CrytoSPI(一个系统接口)筛选这些调用并且把这些调用传递到适合的CSP函数。然后CSP通过对参数的解析调用适当的CSP函数,最后向操作系统返回期盼值(加密操作是由特定的CSP来完成的)。

每个CSP是实现全部加密操作的独立模块。每个应用程序中至少需要一个CSP完成加密操作。对于使用多个CSP的情况下,在加密函数调用时需要指定CSP。当然基本加密服务是默认绑定到CAPI的。每一个CSPCAPI提供不同的实现,例如某些实现了对硬件的支持。

CSP有多种类型,且数目在增加中,以下列举几种:

Microsoft Base Cryptographic Provider

Microsoft Strong Cryptographic Provider

Microsoft Enhanced Cryptographic Provider

Microsoft AES Cryptographic Provider

Microsoft DSS Cryptographic Provider

……

更多内容可见:http://msdn.microsoft.com/en-us/library/aa386983.aspx

 

CAPI的功能:向应用开发人员提供对基于windows的应用程序添加验证、编码和加密的能力。

CryptoSPI的功能:将CryptoAPI的调用传递给CSP,可以理解为使用CSP

 

(二)  CryptoAPI

全称:(MicrosoftCryptography Application Programming Interface即(微软)加密应用编程接口,也缩写为:CAPI

CAPI提供一套安全相关的函数集合,用于加密、摘要、数字签名等。

(三)  密钥存储区

密钥可以保存在磁盘、内存或硬件密钥存储区中。

例如:可以以文件的形式保存在磁盘中或保存在密钥容器中;也可以保存在例如智能卡硬件的密钥存储区中。

(四)  公钥加密Windows密钥库

 Windows系统提供两种密钥存储类型(级别):

用户级别:User key store

存储在特定用户的 Windows 用户配置文件中

 

计算机级别:machine key store

对于所有可以登录到计算机的用户都可用,而且可以使用 ACL 限制对加密密钥信息的访问权限

(五)  密钥容器

Key container。密钥容器是保存密钥的最小单位,包含了密钥和其它信息。

(六)  .net中的CSP

.net中,以CryptoServiceProvider结尾的类是相应的 CSP 的托管代码包装类,即实现加密服务的提供者,名字空间:System.Security.Cryptography

TripleDESC私钥加密为例:

public   void  Test_7_TripleDES()
{
    
string  strContent  =   " 123aaa " ;
    
string  strKey  =   " qwuduII*6&*%^&(90)) "

    TripleDESCryptoServiceProvider DES 
=   new  TripleDESCryptoServiceProvider();

    MD5CryptoServiceProvider hashMD5 
=   new  MD5CryptoServiceProvider(); 

    DES.Key 
=  hashMD5.ComputeHash(Encoding.UTF8.GetBytes(strKey));

    DES.Mode 
=  CipherMode.ECB; 

    ICryptoTransform DESEncrypt 
=  DES.CreateEncryptor();

    
byte [] Buffer  =  Encoding.UTF8.GetBytes(strContent);

    
byte [] sipherbytes =  DESEncrypt.TransformFinalBlock(Buffer,  0 , Buffer.Length);

    Console.WriteLine(Encoding.UTF8.GetString(sipherbytes)); 

    ICryptoTransform DESdecrypt 
=  DES.CreateDecryptor();

    
byte [] plainbytes  =  DESdecrypt.TransformFinalBlock(sipherbytes,  0 , sipherbytes.Length);

    Console.WriteLine(Encoding.UTF8.GetString(plainbytes));

 

(七)  .net中的CspParameters

CspParameters类,名字空间为:System.Security.Cryptography,表示可从非托管CrytoAPI传递到内部使用加密服务提供程序CSP的托管加密类的参数,即向CSP传递执行加密操作的参数。

它的作用:

1 指定特定的CSP

2 管理密钥容器

3 指定签名密钥或交换密钥

重要成员:

ProviderType:指定提供程序的类型(按数值)。如下表

ProviderName:指定提供程序的类型(按名字)。如下表

 

提供程序类型

数值

PROV_RSA_FULL

1

PROV_RSA_SIG

2

PROV_DSS

3

PROV_FORTEZZA

4

PROV_MS_EXCHANGE

5

PROV_SSL

6

PROV_RSA_SCHANNEL

12

PROV_DSS_DH

13

PROV_EC_ECDSA_SIG

14

PROV_EC_ECNRA_SIG

15

PROV_EC_ECDSA_FULL

16

PROV_EC_ECNRA_FULL

17

PROV_DH_SCHANNEL

18

PROV_SPYRUS_LYNKS

20

PROV_RNG

21

PROV_INTEL_SEC

22

PROV_REPLACE_OWF

23

PROV_RSA_AES

24

 

PROV_RSA_FULL类型为例:

用途

算法支持

KeyExchange

RSA

Signature

RSA

Encryption

RC2 RC4

Hashing

MD5 SHA

 

更多内容可见:

http://msdn.microsoft.com/en-us/library/aa380244.aspx

 

KeyNumber:指定密钥用作签名密钥还是交换密钥。

交换密钥是一个不对称密钥对,用于加密会话密钥,以便可以安全地存储会话密钥并与其他用户交换会话密钥。通过Exchange(1)指定交换密钥。与CAPI中使用的AT_KEYEXCHANGE 值对应。

签名密钥是不对称密钥对,用于对数字签名的消息或文件进行身份验证。通过Signature(2)指定签名密钥。与CAPI中使用的AT_SIGNATURE 值对应。默认情况下,KeyNumber字段指定交换密钥。

对这个属性对应的有一个同名的枚举KeyNumber

Exchange

一个交换密钥对,用于加密会话密钥以使它们可以安全存储并与其他用户交换。

Signature

一个签名密钥对,用于对数字签名的消息或文件进行身份验证。

 

KeyContainerName:密钥容器名。通过它可以管理密钥容器:创建、获取、释放。

 

示例:密钥容器创建

public   void  Test_9_keycontainer()

    Encoding _encoding
= Encoding.UTF8;
    
string  strPlaintext  =   " 这是abc123! " ;
    
byte [] bPlaintext  =  _encoding.GetBytes(strPlaintext); 

    
byte [] bEncrypt;
    
byte [] bDecrypt; 

    
// 创建容器
    CspParameters cspParams  =   new  CspParameters();
    cspParams.KeyContainerName 
=   " selfkeys " ;
    cspParams.ProviderType 
=   1 ; // PROV_RSA_FULL

    
// 创建密钥对,并添加到容器中
    RSACryptoServiceProvider provider  =   new  RSACryptoServiceProvider(cspParams); 

    
// 公钥加密
    RSACryptoServiceProvider _provider1  =   new  RSACryptoServiceProvider(cspParams);
    bEncrypt 
=  _provider1.Encrypt(bPlaintext,  true );
    Console.WriteLine(_encoding.GetString(bEncrypt));
 

    
// 私钥解密
    RSACryptoServiceProvider _provider2  =   new  RSACryptoServiceProvider(cspParams);
    bDecrypt 
=  _provider2.Decrypt(bEncrypt,  true );
    Console.WriteLine(_encoding.GetString(bDecrypt));
}

 

 

未完待续……

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
5G 数据安全/隐私保护
5G终端标识SUPI,SUCI及IMSI解析
IMSI,SUPI,SUCI均为UE终端标识,区别在于IMSI为LTE终端标识,SUPI为5G非加密终端标识,一般等同于IMSI,SUCI为5G加密终端标识,需要解密后才能得到SUPI。
3384 0
5G终端标识SUPI,SUCI及IMSI解析
|
机器学习/深度学习 人工智能 算法
图解机器学习 | KNN算法及其应用
KNN算法(K近邻算法)是一种很朴实的机器学习方法,既可以做分类,也可以做回归。本文详细讲解KNN算法相关的知识,包括:核心思想、算法步骤、核心要素、缺点与改进等。
4235 1
图解机器学习 | KNN算法及其应用
|
4月前
|
人工智能 自然语言处理 搜索推荐
阿里巴巴首批企业级Agent来了!
阿里巴巴旗下瓴羊推出首批企业级Agent应用,包括“超级客服专家”和“超级电销专家”,基于多年电商经验与AI技术,显著提升客服与销售效率。通过自动化处理退换货、售后补发、线索筛选等任务,企业效率提升超60%,助力实现“人+Agent”协同新模式。
1051 0
|
监控 数据可视化 项目管理
三角方式是什么?如何在项目管理中应用
在项目管理领域,三角方式(Project Management Triangle)是最经典的方法之一,强调项目成功的三大关键要素:范围、时间和成本。这三者相互关联,调整其中之一将影响其他两者。项目经理需在三者间找到平衡,以确保项目顺利进行。本文详细探讨了三角方式的概述、实际应用、执行步骤及案例分析,帮助项目经理更好地理解和运用这一模型,提高项目管理效率。通过合理应用三角方式,项目经理可在面对变化和挑战时,确保项目按时、按预算和高质量完成。
276 0
|
12月前
|
敏捷开发 监控 测试技术
探索自动化测试框架的构建与优化####
在软件开发周期中,自动化测试扮演着至关重要的角色。本文旨在深入探讨如何构建高效的自动化测试框架,并分享一系列实用策略以提升测试效率和质量。我们将从框架选型、结构设计、工具集成、持续集成/持续部署(CI/CD)、以及最佳实践等多个维度进行阐述,为软件测试人员提供一套系统化的实施指南。 ####
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
312 5
|
Java Maven
IntelliJ IDEA的maven如何提高下载速度
IntelliJ IDEA的maven如何提高下载速度
1109 0
|
机器学习/深度学习 编解码 自然语言处理
论文阅读笔记 | Transformer系列——Swin Transformer
论文阅读笔记 | Transformer系列——Swin Transformer
1978 0
论文阅读笔记 | Transformer系列——Swin Transformer
|
SQL 关系型数据库 MySQL
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
643 0
|
存储 数据可视化 JavaScript
基于Echarts构建大数据招聘岗位数据可视化大屏
基于Echarts构建大数据招聘岗位数据可视化大屏
772 0