在RSA加密算法的描述中,利用makecert工具生成的MyTestCert证书举行加密解密,这个证书具有RSA算法1024位的密钥。
RSA加密解密过程如下:
1、生成RSA证书、发放证书
RSA证书利用makecert工具生成的MyTestCert,当然也能够是从商业CA获得的证书,你获得的证书应当是含有公钥和私钥的全面证书。要接逝步柢数据,必需把你的公钥发放给加密数据的加密方,加密方利用你的公钥加密数据。证书要么以pfx形式存在,要么被导入到证书存储区。
万一你的RSA证书存在于证书存储区能够穿越证书管教扼制台供给的证书导出功能导出只含有公钥的cer证书,如果证书以pfx证书文件形式存在,能够穿越代码读取证书然后导出为只含公钥的cer证书。
2、 字符串明文转成某一代码页对应的编码字节流
待加密的数据可能有两种形式,一种是二进制的数据,本身即便一组字节流,这么的数据能够跳过这一步,直接进去加密环节。还有一种情形是字符串数据,字符串中同样的字符利用不同的代码页会生成不同的字节码,因而从字符串到字节流的转换是必需指定利用何种编码的。在解密后,要从字节流通换到字符串即将利用雷同的代码页解码,否则就会揭示乱码。
//保留明文文件的字节数组
Byte[] plainTextByte = Encoding.UTF8.GetBytes(&ldquohttp://www.9tishop.info/lianxiwomen/545.htmlhttp://www.damuge.info/gongsi/627.html;RSA证书对敏感数据举行加密http://www.myfo4.info/lianxiwomen/627.html!”);
这里用utf8代码页对明文举行编码,把明文字符串转成字节流。
3、 加密垄断
//从只包括公钥的证书文件载入证书
X509Certificate2 myX509Certificate2 = new X509Certificate2(@"C:/Samples/PartnerAEncryptMsg/MyTestCert.cer");
//从cer证书中获得含公钥的RSACryptoServiceProvider
RSACryptoServiceProvider
//利用RSACryptoServiceProvider
Byte[] Cryptograph = myRSACryptoServiceProvid
利用1024为的密钥加密,原料该当是128字节(1024位)的byte[]的原始数据,加密后的数据也是128字节(1024位),万一明文不足128字节,RSACryptoServiceProvider
Dotnet的RSA告终有个个性,它定然要在明文中增加一些随机数,因而明文不能把128字节占满,切实测验,明文最多为117字节,留下的空间用来添补随机数。因而,用统一个密钥对统一串字符串举行加密,每次获得的密文都是不一样的。
4、 解密垄断
//从证书文件载入证书,万一含有私钥的,必需供给保留证书时设置的密码
X509Certificate2 myX509Certificate2 = new X509Certificate2(@"C:/Samples/PartnerAEncryptMsg/MyTestCert.pfx", "password");
//从证书中获得含私钥的RSACryptoServiceProvider
RSACryptoServiceProvider
//利用RSACryptoServiceProvider
byte[] plaintextByte = myRSACryptoServiceProvid
解密必需载入含私钥的pfx证书,必需供给私钥防御密码。
5、 从编码字节流通成字符串明文
利用加密时批准的同样的代码页utf8把解密后的明文byte[]转成字符串:string Plaintext = Encoding.UTF8.GetString(plaintextByte);
小知识之公钥:
公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。