开发者社区> zting科技> 正文

非对称加密(3).NET 非对称加密体系

简介:
+关注继续查看

非对称加密(3.NET 非对称加密体系

 

与对称加密算法相同,所有的非对称算法的相关类也存在于System.Security.Cryptography命名空间中。在该命名空间中,.NET框架提供了RSADSAECCDiffer-Hellman共四种非对称加密算法的实现。本节介绍其中几种主要的相关类和接口。具体应用的相关内容将在下一节进行介绍。

AsymmetricAlgorithm

AsymmetricAlgorithm抽象类是所有非对称加密算法相关类的基类。该类的主要成员如下:

1)        AsymmetricAlgorithm()函数。该函数是AsymmetricAlgorithm类的构造函数。

2)        static Create()函数。创建非对称加密算法的执行对象。

3)        static AsymmetricAlgorithm Create(string algName)函数。创建指定名称的非对称加密算法的执行对像。

4)        abstract void FromXmlString(string xmlString)函数。在派生类中重写时,从XML字符串重新构造AsymmetricAlgorithm对象。

5)         int KeySizeValue字段。表示不对称算法所用密钥模块的大小(单位:位)。

6)         KeySizes[] LegalKeySizesValue字段。指定不对称算法支持的密钥大小。不对称算法仅支持与该数组中的条目匹配的密钥大小。

7)         abstract string KeyExchangeAlgorithm { get; }属性。当在派生类中重写时,获取密钥交换算法的名称。

8)        virtual int KeySize { get; set; }属性。获取或设置不对称算法所用密钥模块的大小(单位:位)。

9)         virtual KeySizes[] LegalKeySizes { get; }属性。获取不对称算法支持的密钥大小。不对称算法仅支持与该数组中的条目匹配的密钥大小。

10)     abstract string SignatureAlgorithm { get; }属性。获取签名算法的名称。

RSA 

RSA类是所有RSA算法实现类的基类,继承自AsymmetricAlgorithm类。RSA类的主要成员如下(继承自AsymmetricAlgorithm类的成员不再重复):

1)        abstract byte[] DecryptValue(byte[] rgb)方法。在派生类中重写时,使用私钥解密输入数据。参数rgb是要解密的密码文本。

2)        abstract RSAParameters ExportParameters(bool includePrivateParameters)方法。在派生类中重写时,导出RSAParameters实例。参数includePrivateParameterstrue时表示要包括私有参数,否则为false

3)        abstract void ImportParameters(RSAParameters parameters)方法。在派生类中重写时,导入指定的RSAParameters实例。

RSACryptoServiceProvider

RSACryptoServiceProvider类是RSA类的默认实现,继承了ICspAsymmetricAlgorithm接口。该类中非继承成员如下:

1)   RSACryptoServiceProvider()构造函数。使用默认密钥初始化 RSACryptoServiceProvider 类的新实例。如果没有找到默认密钥,则创建一个新密钥。此构造函数创建一个Exchange密钥对,用于加密会话密钥以使它们可以安全存储并与其他用户交换。生成的密钥对应于在非托管Microsoft Cryptographic API (CAPI) 中使用的以 AT_KEYEXCHANGE 值生成的密钥。

2)   RSACryptoServiceProvider(int dwKeySize)构造函数。使用指定的密钥大小初始化RSACryptoServiceProvider类的新实例。

3)   RSACryptoServiceProvider(CspParameters parameters)构造函数。使用指定的参数初始化RSACryptoServiceProvider类的新实例。此构造函数创建或重用使用parameters参数的KeyContainerName 字段指定的密钥容器。在默认情况下,此构造函数创建一个Exchange 密钥对,用于加密会话密钥以使它们可以安全存储并与其他用户交换。生成的密钥对应于在非托管Microsoft Cryptographic API CAPI)中使用的以AT_KEYEXCHANGE值生成的密钥。   你可以创建一个Signature密钥对,用于通过将parameters参数的KeyNumber字段设置为Signature值来对消息或文件进行身份验证(数字签名)。此类型的密钥对应于 CAPI 中使用的AT_SIGNATURE值。如果使用指定的Exchange值创建一个 RSACryptoServiceProvider 对象,然后用指定的Signature值创建另一个 RSACryptoServiceProvider 对象,如果两个对象都指定相同的密钥容器名称,两个密钥将放置在一个容器中。若要创建与使用RSACryptoServiceProvider类的强名称签名兼容的密钥,必须创建一个Signature密钥对。

4)   RSACryptoServiceProvider(int dwKeySize,CspParameters parameters)构造函数。使用指定的密钥大小和参数初始化RSACryptoServiceProvider类的新实例。

5)   byte[] Decrypt(byte[] rgb,bool fOAEP)方法。使用RSA算法对数据进行解密。参数rgb为要解密的数据。参数fOAEP如果为true,则使用OAEP填充(仅在运行Microsoft Windows XP或更高版本的计算机上可用)执行直接的RSA解密;否则,如果为false,则使用PKCS#1 1.5版填充。

6)   byte[] Encrypt(byte[] rgb,bool fOAEP)方法。使用RSA算法对数据进行加密。参数解释同上。

7)   byte[] ExportCspBlob(bool includePrivateParameters)方法。导出一个表示 RSA 密钥信息的Blob

8)   void ImportCspBlob(byte[] keyBlob)方法。导出一个表示RSA密钥信息的BlobImportCspBlob 方法使用兼容非托管 Microsoft Cryptographic API (CAPI)  Blob 初始化 RSACryptoServiceProvider对象的密钥数据。

9)   SignData(Byte[], Object)方法。使用指定的哈希算法计算指定字节数组的哈希值,并对计算所得的哈希值签名。

10)             SignData(Stream, Object)方法。使用指定的哈希算法计算指定输入流的哈希值,并对计算所得的哈希值签名。

11)             SignData(Byte[], Int32, Int32, Object)使用指定的哈希算法计算指定字节数组子集的哈希值,并对结果哈希值签名。

12)             bool VerifyData(byte[] buffer,Object halg,byte[] signature)方法。通过将指定的签名数据与为指定数据计算的签名进行比较来验证指定的签名数据。

13)             bool VerifyHash(byte[] rgbHash,string str,byte[] rgbSignature)方法。通过将指定的签名数据与为指定哈希值计算的签名进行比较来验证指定的签名数据。

14)             PersistKeyInCsp属性。获取或设置一个值,该值指示密钥是否应该永久驻留在加密服务提供程序 CSP 中。使用此属性将密钥保存到密钥容器中。在CspParameters对象中指定密钥容器名称并用其初始化RSACryptoServiceProvider对象时,PersistKeyInCsp属性自动设置为rue。可以使用KeyContainerName字段指定容器名称。如果将PersistKeyInCsp属性设置为 true 而不使用CspParameters 对象初始化 RSACryptoServiceProvider对象,将创建一个以“CLR”开头的随机密钥容器名称。

15)             UseMachineKeyStore属性。获取或设置一个值,该值指示密钥是否应保持在计算机的密钥存储区中(而不是保持在用户配置文件存储区中)。将此属性设置为true相当于将UseMachineKeyStore标志传递给CspParameters 对象。UseMachineKeyStore属性适用于当前应用程序域中的所有代码,而CspParameters对象只适用于显式引用该属性的类。当在一个没有加载用户配置文件的帐户下模拟或运行时,这些设置很有用。

其他类

DSA类和它的子类DSACryptoServiceProvider定义并实现了DSA算法,相关内容会在6.5节进行介绍。

RSAOAEPKeyExchangeDeformatter类用来对最优不对称加密填充(OAEP)密钥交换数据进行解密。

RSAOAEPKeyExchangeFormatter类使用RSA创建最优不对称加密填充(OAEP)密钥交换数据。

RSAPKCS1KeyExchangeDeformatter类,用来解密PKCS #1密钥交换数据。

RSAPKCS1KeyExchangeFormatter类,用来使用RSA创建PKCS#1密钥交换数据。

RSAPKCS1SignatureDeformatter类,用来验证RSAPKCS #1 1.5版签名。

RSAPKCS1SignatureFormatter类,用来创建RSAPKCS #1 1.5版签名。

 

-----------------------注:本文部分内容改编自《.NET 安全揭秘》


本文转自玄魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/archive/2012/06/23/2559554.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
.NET加密配置文件connectionStrings节点
具体的可以参考petshop源码程序。 加密前: View Code   加密后: ...
1208 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29133 0
.Net加密与解密——非对称加密之数字签名
  一,从非对称加密的认证模式说起 由消息的发送方发布公钥,持有私钥。   步骤: 1,发送方公布自己的公钥,任何人都可以获得。 2,发送方使用自己的私钥对消息进行加密,然后发送。
828 0
Kubernetes的service mesh – 第三部分:将一切加密
在本文中,我们将讲述如何使用linkerd作为service mesh在不需要修改任何应用代码的情况下,也能添加TLS至所有的“服务到服务”HTTP请求中。 注意:这是关于Linkerd、Kubernetes和service mesh的系列文章其中一篇,其余部分包括: Top-line servi.
1072 0
.Net加密与解密——非对称加密之加密模式
  一,非对称加密         非对称加密具有一组密钥对,一个是对外公开的,任何人都可以获取,称为公钥;         一个是自行保管并严格保密的,称为私钥。     规则如下:            由某人A的公钥加密消息,只能由A的私钥进行解密;    由A的私钥加密的消息,只能由A的公钥解密。
823 0
.Net加密与解密——散列运算
  一,散列运算的特点             1,散列运算是不可逆的,可以将散列运算理解为单向的加密; 2,任何两个不相同的文件,哪怕只有一个字节的细微差别,得到的摘要都是完全不同的。
792 0
+关注
3550
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载