`
conkeyn
  • 浏览: 1524477 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据

阅读更多

源自:http://www.cnblogs.com/chnking/archive/2007/08/30/875947.html

 

RSA证书加、解密敏感数据

X.509证书标准支持三种不对称加密算法:RSA, DSA, Diffie-Hellman algorithms。最常用的是RSA算法。所以本文就以前面章节使用makecert工具生成的生成的MyTestCert证书进行加密解密,这个证书具有RSA算法1024位的密钥对。

 


Figure 12. RSA加密解密过程

 

证书使用前面“使用makecert工具获得”章节生成的MyTestCert,当然也可以是从商业CA获得的证书。

你获得的证书应该是含有公钥和私钥的完整证书,一般是pfx形式的证书。

要接收加密数据,需要把你的公钥分发给加密数据的加密方,加密方使用你的公钥加密数据。

证书要么以pfx形式存在,要么被导入到证书存储区。

如果你的证书存在于证书存储区可以通过证书管理控制台提供的证书导出功能导出只含有公钥的cer证书。

如果证书以pfx证书文件形式存在,可以通过代码读取证书然后导出为只含公钥的cer证书。

参考前面章节导出一个名为MyTestCert.cer证书,将此证书分发给需要用来加密的加密方。

 

待加密的数据可能有两种形式,一种是二进制的数据,本身就是一组字节流,这样的数据可以跳过这一步,直接进入加密步骤。还有一种情况是字符串数据,字符串中同样的字符使用不同的代码页会生成不同的字节码,所以从字符串到字节流的转换是需要指定使用何种编码的。在解密之后,要从字节流转换到字符串就要使用相同的代码页解码,否则就会出现乱码。

//保存明文文件的字节数组

Byte[] plainTextByte = Encoding.UTF8.GetBytes(“RSA证书对敏感数据进行加密!”);

这里用utf8代码页对明文进行编码,把明文字符串转成字节流。

 

//从只包含公钥的证书文件载入证书

X509Certificate2 myX509Certificate2 = new X509Certificate2(@"C:\Samples\PartnerAEncryptMsg\MyTestCert.cer");

//cer证书中获得含公钥的RSACryptoServiceProvider

RSACryptoServiceProvider myRSACryptoServiceProvider = (RSACryptoServiceProvider)myX509Certificate2.PublicKey.Key;

//使用RSACryptoServiceProvider把明文字节流加密为密文字节流

Byte[] Cryptograph = myRSACryptoServiceProvider.Encrypt(plainTextByte, false);

使用1024为的密钥加密,原料应该是128字节(1024位)的byte[]的原始数据,加密后的数据也是128字节(1024位),如果明文不足128字节,RSACryptoServiceProvider会自动用随机数补足128字节。

DotnetRSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字节占满,实际测试,明文最多为117字节,留下的空间用来填充随机数。

所以,用同一个密钥对同一串字符串进行加密,每次得到的密文都是不一样的。

 

//从证书文件载入证书,如果含有私钥的,需要提供保存证书时设置的密码

X509Certificate2 myX509Certificate2 = new X509Certificate2(@"C:\Samples\PartnerAEncryptMsg\MyTestCert.pfx", "password");

//从证书中获得含私钥的RSACryptoServiceProvider

RSACryptoServiceProvider myRSACryptoServiceProvider = (RSACryptoServiceProvider)myX509Certificate2.PrivateKey;

//使用RSACryptoServiceProvider把密文字节流解密为明文字节流

byte[] plaintextByte = myRSACryptoServiceProvider.Decrypt(Cryptograph, false);

解密需要载入含私钥的pfx证书,需要提供私钥保护密码。

 

使用加密时采用的同样的代码页utf8把解密后的明文byte[]转成字符串

string Plaintext = Encoding.UTF8.GetString(plaintextByte);

  • 大小: 37.7 KB
分享到:
评论

相关推荐

    使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据

    本篇将深入探讨如何在实际应用中结合X.509数字证书与RSA算法来加密解密较长的数据,同时利用对称加密技术提高效率。 首先,X.509数字证书包含了一个公钥,它是非对称加密中的一个关键组成部分。这个公钥可以被任何...

    X.509数字证书

    **X.509数字证书详解** X.509是一种国际标准,定义了公钥证书的格式,用于在开放的网络环境中验证身份。这个标准由国际电信联盟电信标准部门(ITU-T)的X系列建议制定,编号为X.509。X.509证书是网络安全体系中的...

    JAVA 使用数字证书加密解密文件

    本文将深入探讨如何使用Java语言结合RSA算法,通过数字证书实现文件的加密和解密操作。RSA是一种非对称加密算法,它的核心在于一对密钥:公钥和私钥。公钥可以公开给任何人,用于加密数据;而私钥必须保密,用于解密...

    公钥私钥加密解密数字证书数字签名详解.docx

    ### 公钥私钥加密解密、数字证书与数字签名详解 #### 一、基础知识概述 在探讨公钥私钥加密解密、数字证书以及数字签名之前,我们需要先理解几个核心概念。 **1. 密钥对:** - 在非对称加密技术中,存在两种密钥...

    c语言写成的取x.509证书公钥

    在IT行业中,X.509证书是一种广泛用于身份验证的标准格式,特别是在网络安全和SSL/TLS协议中。这种证书包含了公钥基础设施(PKI)中的关键信息,如发行者的身份、持有者的身份以及公钥。C语言作为一种底层、高效的...

    FileEncryption.rar C#文件加密解密

    在C#编程环境中,文件加密和解密是保护数据安全的重要技术。本文将详细探讨如何使用C#实现文件的加密和解密,以及涉及到的相关知识点。 1. **基础概念** - **加密**:加密是一种将明文转换为密文的过程,目的是...

    RSA加密解密算法objective-c 完美实现

    RSA加密解密算法是公开密钥密码体制中的一个重要代表,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其发明者的名字首字母组合而得名。Objective-C,作为Apple开发的面向对象的编程语言,常用于iOS和...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    本教程主要讲解如何在C# .NET环境中使用RSA进行公钥加密和私钥解密,以及私钥加密和公钥解密的操作。 首先,让我们了解RSA的基本原理。RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。...

    RSA加密解密的使用,含jsencrypt.js文件(uni-app也可用)

    RSA加密解密是一种广泛应用于网络安全中的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大数因子分解的困难性,为数据提供了一种安全的传输方式。 ...

    Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现.zip

    RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据安全领域,如数字签名、密钥交换等。本教程将详细讲解如何在iOS项目中使用Object-C实现RSA算法的加密和解密功能。 首先,了解RSA的基本原理至关...

    bcprov-jdk15on-1.47.jar Java 加密 解密 jar包

    3. **数字签名和证书处理**:Bouncy Castle能够生成和验证X.509证书,以及处理RSA、DSA、ECDSA等签名算法。 4. **SSL/TLS协议支持**:它提供了SSL和TLS协议的实现,有助于构建安全的网络通信。 5. **随机数生成器*...

    rsa.zip_RSA 加密解密_rsa

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年...以上就是关于使用Java实现RSA加密解密的关键知识点,通过理解这些概念和步骤,开发者可以有效地在自己的项目中集成RSA加密功能。

    x509_public_key.rar_X.509_x509

    这个C语言源文件可能包含了实现X.509证书中的公钥操作的代码,比如加载证书、解码公钥、验证签名以及使用公钥进行加密和解密等。 6. **安全性**: - 证书应安全存储,防止泄露,私钥尤其需要保护,因为一旦泄露,...

    加密证书和RSA加密解密

    加密证书和RSA加密解密是信息安全领域中的重要概念,它们在保护数据安全、验证网络通信双方身份以及确保信息完整性方面发挥着关键作用。在此,我们将深入探讨这些知识点,并结合一个名为"demo"的示例来进一步理解其...

    jsencrypt.min.js通过JSEncrypt分段加密解密

    JavaScript中的RSA加密是一种广泛用于前端安全传输数据的技术,特别是在与服务器进行敏感信息交互时,如登录凭证、支付信息等。`jsencrypt.min.js` 是一个轻量级的库,它实现了RSA加密算法,并且提供了方便的API供...

    C# RSA加密解密

    **C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...

    Rsa加密解密.rar_RSA 加密解密_java rsa_rsa加密_rsa加密java_加密 解密

    RSA加密解密是一种广泛应用于网络安全领域的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得只有持有正确密钥的人才能...

    RSA加密解密 PHP JS

    对于前端应用,通常我们会使用公钥加密敏感数据,然后在服务器端用私钥解密。例如,`crypto-js`库提供了一个简单的API,可以调用`CryptoJS.RSA.encrypt()`进行加密,`CryptoJS.RSA.decrypt()`进行解密。 以下是一个...

    RSA.zip_RSA 加密解密_rsa_rsa加密算法_rsa加密解密_rsa加密解密算法

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式...

Global site tag (gtag.js) - Google Analytics