非对称加密(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,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
存储 算法 安全
【加密算法】AES对称加密算法简介
【加密算法】AES对称加密算法简介
|
2月前
|
机器学习/深度学习 算法 安全
【加密算法】RSA非对称加密算法简介
【加密算法】RSA非对称加密算法简介
|
1月前
|
算法 Java 开发工具
使用阿里云KMS产品针对 Springboot 接口参数加密解密功能
针对Springboot里面使用开源工具使用加解密,替换成阿里云KMS产品进行加解密;
144 1
|
2月前
|
机器学习/深度学习 安全 算法
【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》
【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》
26 0
|
2月前
|
存储 安全 Nacos
使用KMS为MSE-Nacos敏感配置加密的最佳实践
本文主要介绍通过KMS密钥管理服务产生的密钥对敏感的AK等数据进行加密之后可以有效解决泄漏带来的安全风险问题,其次通过KMS凭据托管的能力直接将MSE的主AK进行有效管理,保障全链路无AK的业务体验,真正做到安全、可控。
92271 3
|
Java 数据安全/隐私保护
Java实现最电话号码的简单加密源码
Java实现最电话号码的简单加密源码
18 0
|
2月前
|
存储 安全 算法
【接口加密】Java中的接口加密实践
【接口加密】Java中的接口加密实践
|
2月前
|
算法 安全 Java
Java 实现 RSA 非对称加密算法-加解密和签名验签
Java 实现 RSA 非对称加密算法-加解密和签名验签
|
Java 数据安全/隐私保护
java实现加密电话号码,有具体的加密流程注释
java实现加密电话号码,有具体的加密流程注释
21 0
|
3月前
|
存储 算法 安全
3分钟快速了解使用Java进行对称加密
对称加密算法有很多种,其中较为知名的有AES(高级加密标准)、DES(数据加密标准)以及3DES(三重数据加密算法)等。这些算法在不同的场景下有着广泛的应用,为保障数据安全提供了有力支持。
61 0

热门文章

最新文章