利用RSACryptoServiceProvider进行RSA加密解密
2017-02-06 15:34
706 查看
前言:
本文只介绍How to use,对于加密算法的研究不予讨论。
关于私钥的存储,微软给的建议是使用windows自带的秘钥容器,相见文档。
为了直观看到私钥和公钥,本文直接将其存入XML文件中。现实情况则要复杂的多,还牵涉到数字签名、数字证书等。
关于公钥、私钥、数字签名、数字证书的概念,相见阮一峰大神的博客,传送门在这里。
正文:由于RSA不适合加密大量数据,所以可以采用DES和RSA混合加密的方法,即先用DES加密数据,再用RSA加密DES的秘钥。
RSAHelper 类
class Program { static void Main(string[] args) { string rootPath = AppDomain.CurrentDomain.BaseDirectory; string RSAPath = Path.Combine(rootPath, "RSA"); string encryptFilePath = Path.Combine(RSAPath, "加密文件.dll"); string decryptFilePath = Path.Combine(RSAPath, "解密文件.txt"); string publicKeyPath = Path.Combine(RSAPath, "RSA公钥.xml"); string privateKeyPath = Path.Combine(RSAPath, "RSA私钥.xml"); string DESKeyPath = Path.Combine(RSAPath, "经过RSA加密的DES秘钥.dll"); string DESIVPath = Path.Combine(RSAPath, "经过RSA加密的DES向量.dll"); if (Directory.Exists(RSAPath)) { Directory.Delete(RSAPath, true); } Directory.CreateDirectory(RSAPath); Console.WriteLine("请输入要加密的内容:"); string data = Console.ReadLine(); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string RSAPublic = rsa.ToXmlString(false);// RSA公钥 string RSAPrivate = rsa.ToXmlString(true);// RSA私钥 byte[] DESKey = DESHelper.CreateKey(); // DES秘钥 byte[] DESIV = DESHelper.CreateIV(); // DES向量 // DES加密输入内容 byte[] enData = DESHelper.EncryptOrDecrypt(Encoding.Unicode.GetBytes(data), DESKey, DESIV, true); // 写入加密文件 RSAHelper.WriteByte(enData, encryptFilePath); // 写入RSA公钥 RSAHelper.WriteText(RSAPublic, publicKeyPath); // 写入RSA私钥 RSAHelper.WriteText(RSAPrivate, privateKeyPath); // 写入经过RSA加密的DES秘钥 RSAHelper.WriteByte(RSAHelper.EncryptOrDecrypt(DESKey, RSAPublic, true), DESKeyPath); // 写入经过RSA加密的DES向量 RSAHelper.WriteByte(RSAHelper.EncryptOrDecrypt(DESIV, RSAPublic, true), DESIVPath); // 读取RSA私钥 string privateKey = RSAHelper.GetText(privateKeyPath); // 读取DES秘钥并解密 byte[] realDESKey = RSAHelper.EncryptOrDecrypt(RSAHelper.GetByte(DESKeyPath), privateKey, false); // 读取DES向量并解密 byte[] realDESIV = RSAHelper.EncryptOrDecrypt(RSAHelper.GetByte(DESIVPath), privateKey, false); // 读取加密文件 byte[] enData2 = RSAHelper.GetByte(encryptFilePath); // 解密文件 byte[] deData = DESHelper.EncryptOrDecrypt(enData2, realDESKey, realDESIV, false); // 写入解密文件 RSAHelper.WriteText(Encoding.Unicode.GetString(deData), decryptFilePath); Console.WriteLine("加密成功!"); Console.ReadKey(); } }
主程序代码
运行效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/09/c04d869f36391fdd37b1794fa480e392.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/09/e4cc34d1bd505ee9a81b3c06966e4770.png)
(完)
相关文章推荐
- 利用RSACryptoServiceProvider进行RSA加密解密
- 利用openssl进行RSA加密解密
- 利用openssl进行RSA加密解密实例
- Java-web中利用RSA进行加密解密操作的方法示例
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- 利用openssl进行RSA加密解密
- 利用openssl进行RSA加密解密
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- 利用openssl进行RSA加密解密
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- JAVA利用RSA加密算法的长度限制问题解决方案注意: RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行。 RSA加密对明文的长度是有限制的,如
- 利用openssl进行RSA加密解密
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
- 利用openssl进行RSA加密解密
- 利用openssl进行RSA加密解密