C# RSA加密和解密,RSA生成私钥和公钥
创作时间:
作者:
@小白创作中心
C# RSA加密和解密,RSA生成私钥和公钥
引用
CSDN
1.
https://blog.csdn.net/jonnysun/article/details/144291162
C# RSA加密和解密,RSA生成私钥和公钥(使用XML格式秘钥)
目录
- 前言
- 生成xml格式的公钥和私钥
- PrivateKey
- PublicKey
- 测试加密、解密
- 方案1:RSA公钥加密,RSA私钥解密
- 方案2:RSA私钥加密,RSA私钥解密
- 数字签名、验签
- RsaHelper类
前言
网上有大量RSA加密解密解决方案,包括开源Nuget包和源码,作者测试过多种方案,最后选择本文介绍的方案,简单,代码少,效率高!RsaHelper 类能够生成公钥和私钥,不需要在网上在线生成公钥和私钥啦!优秀方案,推荐给大家!
生成xml格式的公钥和私钥
RsaHelper.GetXmlKey(out var privatekey1, out var publickey1);
PrivateKey
<RSAKeyValue><Modulus>0nMMhiGAklb2URWmQsxABYYdrVqyiXfd9kfEVgBsdb39kAw6ivdvOs4ahYWbutcQRq37qRqlRHHAguDxcTWmxpWsFmd9c5DIwvOyXrmynSgGdEVzu5NrCfZlLI7WwvFSQxF/3smdgXQxXYcYwdItV8dXd3CxBaqWS92OzMLkIr0=</Modulus><Exponent>AQAB</Exponent><P>60q62GF9otYbzo6o7Ux1ITNzdxzahBxw6uZ6f1ph+nu+dq/90DQlwxXHKA0T9Y2acw3NjQKg6QNdDvfbjO0Euw==</P><Q>5PiaMXTNBpCO0Yr7T6Cvp7eRMzg79IoVw88bl0dvZ3jNYPOzHMBeOA7E7kWExFNBXlxKN6J0Pon5FVnb2++65w==</Q><DP>1S0axgrmGk9kWCvWj1DTWmZUOdnxfPqLr7drytCnrprIwJ3JFwb4I50qmHXo3HQUOCOMVTLJePPsLzCPQUpJGw==</DP><DQ>lcjrVZ8K4FiAlSNN83Eyd4zmN5N55SbPxiAd9ICOqCmmcN37NbvB5voCabygda3g/VFyW6KyWJb5krYN1Xql0Q==</DQ><InverseQ>M2ggLAOBDR3WxHNI5pZeQIEk13oEQAUMLJCS7ahiFSEowleDhf7DvZVEUXwS9L2abvxunhnLkT8tyn/svy+V9w==</InverseQ><D>iejQ5TkhK0UHp307dfypW7VWz1pnM0S01QaUuBMRAFufxXzuBFE/t9aGdMdolRkIVnj/OQL4GJE+qcXFEv4oqjv/eO/pchmnI+/sXxESyt3wecO6YlHXQ3x/qWhesYnUzRSCoB9BMtHXv4xan2WIAZfYlWCGdnc4MObSC6LywlU=</D></RSAKeyValue>
PublicKey
<RSAKeyValue><Modulus>0nMMhiGAklb2URWmQsxABYYdrVqyiXfd9kfEVgBsdb39kAw6ivdvOs4ahYWbutcQRq37qRqlRHHAguDxcTWmxpWsFmd9c5DIwvOyXrmynSgGdEVzu5NrCfZlLI7WwvFSQxF/3smdgXQxXYcYwdItV8dXd3CxBaqWS92OzMLkIr0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
测试加密、解密
方案1:RSA公钥加密,RSA私钥解密
C#
//方案1:RSA公钥加密
var data = RsaHelper.Encrypt("www.cscode.net|C/S框架网", publickey1);
Console.WriteLine(data);
//方案1:RSA私钥解密
var value = RsaHelper.Decrypt(data, privatekey1);
Console.WriteLine(value);
方案2:RSA私钥加密,RSA私钥解密
C#
//方案2:RSA私钥加密
var data1 = RsaHelper.Encrypt("www.cscode.net|C/S框架网", privatekey1);
//方案2:RSA私钥解密
var value1 = RsaHelper.Decrypt(data, privatekey1);
数字签名、验签
前端使用公钥进行数字签名,后台使用私钥验签。
C#
//数字签名、验签
var signData = RsaHelper.Sign("www.cscode.net|C/S框架网", publickey1);
var isEqual = RsaHelper.VerifySign("www.cscode.net|C/S框架网", signData, privatekey1);
Console.WriteLine(isEqual);
RsaHelper类
RSA算法加密解密(使用XML格式秘钥)
C#
/// <summary>
/// RSA算法加密解密(使用XML格式秘钥)
/// </summary>
public static class RsaHelper
{
/// <summary>
/// 获取RSA 密钥
/// </summary>
/// <param name="privatekey">私钥</param>
/// <param name="publickey">公钥</param>
public static void GetXmlKey(out string privatekey, out string publickey)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
privatekey = provider.ToXmlString(true);
publickey = provider.ToXmlString(false);
}
/// <summary>
/// RSA 使用公钥加密
/// </summary>
/// <param name="plainText">明文</param>
/// <param name="publicKey">公钥</param>
/// <returns></returns>
public static string Encrypt(string plainText, string publicKey)
{
byte[] buffer = Encoding.UTF8.GetBytes(plainText);
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(publicKey);
byte[] output = provider.Encrypt(buffer, false);
return Convert.ToBase64String(output);
}
/// <summary>
/// RSA 使用私钥解密
/// </summary>
/// <param name="encryptedText">明文</param>
/// <param name="privateKey">私钥</param>
/// <returns></returns>
public static string Decrypt(string encryptedText, string privateKey)
{
byte[] buffer = Convert.FromBase64String(encryptedText);
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(privateKey);
byte[] output = provider.Decrypt(buffer, false);
return Encoding.UTF8.GetString(output);
}
/// <summary>
/// 使用公钥数字签名
/// </summary>
/// <param name="data">加密的数据</param>
/// <param name="publicKey">公钥</param>
/// <returns></returns>
public static string Sign(string data, string publicKey)
{
return Encrypt(data, publicKey);
}
/// <summary>
/// 使用私钥验签
/// </summary>
/// <param name="original">原文</param>
/// <param name="encryptedText">数字签名的数据</param>
/// <param name="privateKey">私钥</param>
/// <returns></returns>
public static bool VerifySign(string original, string encryptedText, string privateKey)
{
return Decrypt(encryptedText, privateKey).CompareTo(original) == 0;
}
}
专注.NET技术、C/S架构开发框架软件
C/S框架网 - 开发框架文库
热门推荐
摄影中的透视效果:焦距、距离与角度的完美结合
结构配筋图用什么软件生产
京东方OLED赛道划重点,苹果入局前夜柔性显示战场升温
“中美同日宣布在量子芯片取得重大突破,但方法和所获评价截然不同”
联邦明察局·77|从“乡下人”到特朗普的“门徒”,万斯还能听到悲歌吗?
日语"うち"和"いえ"的区别:心理上的家 vs. 建筑物
职场跳槽与职业发展:解析内推机会的重要性
苹果蒸熟吃和生吃哪个营养价值高
五种太岁中哪一种最为严重 如何判断太岁严重程度
邻居纠纷怎么走司法途径2025?
三国|《三国演义》,吕蒙“白衣渡江”千年骂名的深层解析
黏滞阻尼器:建筑减震领域的“定海神针”
成语“狗尾续貂”有什么历史典故吗?“狗尾续貂”含义详解
毕业论文速成指南来了!
狗脊是什么东西?探索这一天然草本的神奇功效
孕妇吃香蕉会滑胎?让妇产科医生告诉你答案
【科普】超详细版自制猫粮配比 常见自制误区竟然辣么多!
“文件夹管理”与“标签管理”如何合理使用
3到6岁儿童一周营养餐搭配表
CV-6 企业号的前世今生
比特币引领风险资产大涨,泡沫破裂时刻快了?
中国林业市场规模保持持续增长 碳交易仍是行业发展最大机遇
守护爸妈的健康!那些推荐父母做的健检项目!
孩子长高要补赖氨酸吗?还不如每天吃一个…
抗氧剂全解析:定义、分类、作用机理与应用领域
全面解析PUA:识别、认识与防范指南
敦煌壁画里的植物
服用左旋氨氯地平片,这些注意事项一定要知道!
国航、东航、南航发布公告!整治机票“价格陷阱”,维护旅客权益
病毒性肠胃炎吃止泻药恐恶化?医生警告:这3招比吃药更重要!