.NET生成RSA公钥和私钥-加密解密示例

.NET_RSA加密全接触(重、难点解析) .NET_RSA加密全接触(重、难点解析)      .NET Framework提供了两个类供我们使用RSA算法,分别是:用于加密数据的RSACryptoServiceProvider和用于数字签名的DSACryptoServiceProvider,本文主要谈论RSACryptoServiceProvider的使用以及微软实现RSA算法时的一些主要特点。1、.NET中RSA密钥格式RSA的密钥有两种表现形式,一种是通过RSAParameters对象来表现,另一种是通过XML字符串来表现,当通过默认构造函数 阅读详情

我们每一个人的一生中都会难免有缺憾和不如意,也许我们无力改变这个事实,而我们可以改变的只是看待这些事情的态度。用平和的态度去对待生活中的缺憾和苦难。


Form1.cs代码:

  public partial class Form1 : Form
    {
        private const int RsaKeySize = 2048;
        private const string publicKeyFileName = "RSA.Pub";
        private const string privateKeyFileName = "RSA.Private";

        private string basePathToStoreKeys;

        public Form1()
        {
            InitializeComponent();

            basePathToStoreKeys = Directory.GetCurrentDirectory();
        }

        //生成密钥
        private void button1_Click(object sender, EventArgs e)
        {
            GenerateKeys(basePathToStoreKeys);
        }

        //加密文本框内容
        private void button2_Click(object sender, EventArgs e)
        {
            var encryptedString = Encrypt(textBox1.Text, Path.Combine(basePathToStoreKeys, publicKeyFileName));

            textBox2.Text = encryptedString;
        }

        //解密文本框内容
        private void button3_Click(object sender, EventArgs e)
        {
            var decryptedString = Decrypt(textBox2.Text, Path.Combine(basePathToStoreKeys, privateKeyFileName));

            textBox2.Text = decryptedString;
        }

        /// <summary>
        ///在给定路径中生成XML格式的私钥和公钥。
        /// </summary>
        public void GenerateKeys(string path)
        {
            using (var rsa = new RSACryptoServiceProvider(RsaKeySize))
            {
                try
                {
                    // 获取私钥和公钥。
                    var publicKey = rsa.ToXmlString(false);
                    var privateKey = rsa.ToXmlString(true);

                    // 保存到磁盘
                    File.WriteAllText(Path.Combine(path, publicKeyFileName), publicKey);
                    File.WriteAllText(Path.Combine(path, privateKeyFileName), privateKey);

                    MessageBox.Show(string.Format("生成的RSA密钥的路径: {0}\\ [{1}, {2}]", path, publicKeyFileName, privateKeyFileName));
                }
                finally
                {
                    rsa.PersistKeyInCsp = false;
                }
            }
        }

        /// <summary>
        /// 用给定路径的RSA公钥文件加密纯文本。
        /// </summary>
        /// <param name="plainText">要加密的文本</param>
        /// <param name="pathToPublicKey">用于加密的公钥路径.</param>
        /// <returns>表示加密数据的64位编码字符串.</returns>
        public string Encrypt(string plainText, string pathToPublicKey)
        {
            using (var rsa = new RSACryptoServiceProvider(RsaKeySize))
            {
                try
                {
                    //加载公钥
                    var publicXmlKey = File.ReadAllText(pathToPublicKey);
                    rsa.FromXmlString(publicXmlKey);

                    var bytesToEncrypt = System.Text.Encoding.Unicode.GetBytes(plainText);

                    var bytesEncrypted = rsa.Encrypt(bytesToEncrypt, false);

                    return Convert.ToBase64String(bytesEncrypted);
                }
                finally
                {
                    rsa.PersistKeyInCsp = false;
                }
            }
        }

        /// <summary>
        /// Decrypts encrypted text given a RSA private key file path.给定路径的RSA私钥文件解密 加密文本
        /// </summary>
        /// <param name="encryptedText">加密的密文</param>
        /// <param name="pathToPrivateKey">用于加密的私钥路径.</param>
        /// <returns>未加密数据的字符串</returns>
        public string Decrypt(string encryptedText, string pathToPrivateKey)
        {
            using (var rsa = new RSACryptoServiceProvider(RsaKeySize))
            {
                try
                {
                    var privateXmlKey = File.ReadAllText(pathToPrivateKey);
                    rsa.FromXmlString(privateXmlKey);

                    var bytesEncrypted = Convert.FromBase64String(encryptedText);

                    var bytesPlainText = rsa.Decrypt(bytesEncrypted, false);

                    return System.Text.Encoding.Unicode.GetString(bytesPlainText);
                }
                finally
                {
                    rsa.PersistKeyInCsp = false;
                }
            }
        }
    }

生成的RSA.Private的内容:

<?xml version="1.0" encoding="utf-8"?>

<RSAKeyValue>
  <Modulus>veJTjzABfYl9/9YbOOw+EcfIZ1jajWiGPAXW+G/2uIUYh9L9WSyLPghl3oMZM2GDxp9f+chdc0k9lrNbJwsIaereleTiOcl2u/rq+jS8r2WhTfk8bIMWeAO/B5S0IjIbmKXdymRNZFw/KjuY99HdYk6nB1MZ1AJ/e3xJKwWJrXp55Y4DlX9sGTORS9kcy1q4fuxjJHUFAYsasV/vnsjlaau4sp6xBcDIfT1tRkxMZriDPW3J7qH7/qI2X4+iQZQIfAyFpSlqi+4GI9FajogEareCS7d1vc+OYdGc+jX1h0erHsRtlvFHzLcqBmZQ0Gz0XdZxOwJf5vhxUvvoK9BmBw==</Modulus>
  <Exponent>AQAB</Exponent>
  <P>9Dq9A5cVGeBKib4WNSUBQqp25J4p0IUX1foc+zrX6/ZuSgDeXxIKiFmQPcl9R2RTwXQxFYWSkGW4gQis+AMnQJL98kHJXnG2FAiEsEhYUDUEKx29OA+/y/hNoyEbztcggru8Ebn8v4Aq6BMBvM9Q+Q5lIl2I8SRQnDfVnuwdaSc=</P>
  <Q>xwkVjnwN0m9K6EyHT5vrOJbw/0cTdcCtoFU7wDawOHJeDj872dR3vs3rf+YinnMNOo47VgH5CQaFEbhgmiAjYlaz+tPFqD/TiiHp0ceqfN3XjUqDx+TkPYq+gGreeh+XE43lP/Z2YUscLq0x/uHPky2EWIxvqqphvW1Xh7ECaCE=</Q>
  <DP>cH6Zz4yIyKl6S+YFvqbz5Kw2JWoA4q5bY1FYhhP9nw+cj3PE+c+KkHGIsh0cGoVI2wPVFA+5ic+A49aGLZruOp06YZsR0PHZp3KhA73fB9rTt7R0Et2WP7J4uFoov+ZxcCZfI18i32Z+3PTcSQbJSl7qEKE60bAjfUFuoUwq4+M=</DP>
  <DQ>D5hPnxVrQ9TCiscMRxmRaaKyCV55UN2i/RAQmXPvhMy5P+aGev/hzgp2bFQM3FtpavAgCBIpgCKJpKTMtObVvuvKOFoFf7RYj9cuaeh6HESJkiGHh88Qbx4C5S76dZkqDjctAkD+b4siDyo046Kvz/leCE4gpb+p3tzFYfVlmeE=</DQ>
  <InverseQ>ux0qhR3AqWMzOsSnwLtj7OGZR7p8hrga6TEr9V5nuvCovHLUcMcwAjXHm/+ZEWXCuQBnoQC82yQbyICuIUbLkYUSfPE59mxAgxrInqHY3j3IDQ09APyJJ1sIelyB0DZOpFa2ERydH0PcthPcS9/d42vADIuE3Z5k6Y9JVyGqmKQ=</InverseQ>
  <D>kbp2OKk2K5tu2P8AC3K7vDegpTg7G1XB16T/s9Fx/3EeP3d9OogGIUierePdXmKTmMdOCExu9ACcxODHrzI3ddpsk4uC16i3eFN9LSN2QAJ2hnomln0QrHDrlizZBnmAVmnNyvuprcFiNM5ieqdVCZKle+iaJOz529Kp8NuiK0FExKkv10WYSSsSf6T17eNnGqRqaCEnP8LSgu1WbPiKZ1oIEjt6WThGWIN6d9++InqhbXaCdglnA0U7kXXuWuAnlOf0uBlcUwrGBU6IKqmgrMwgqHKMuSSuJ65UoHYp3RTG+ECmtAHTe7YBBNnjOo8QSCEtdUpSdfKtT5YjVJhOwQ==</D>
</RSAKeyValue>

生成的RSA.Pub的内容:

<?xml version="1.0" encoding="utf-8"?>

<RSAKeyValue>
  <Modulus>veJTjzABfYl9/9YbOOw+EcfIZ1jajWiGPAXW+G/2uIUYh9L9WSyLPghl3oMZM2GDxp9f+chdc0k9lrNbJwsIaereleTiOcl2u/rq+jS8r2WhTfk8bIMWeAO/B5S0IjIbmKXdymRNZFw/KjuY99HdYk6nB1MZ1AJ/e3xJKwWJrXp55Y4DlX9sGTORS9kcy1q4fuxjJHUFAYsasV/vnsjlaau4sp6xBcDIfT1tRkxMZriDPW3J7qH7/qI2X4+iQZQIfAyFpSlqi+4GI9FajogEareCS7d1vc+OYdGc+jX1h0erHsRtlvFHzLcqBmZQ0Gz0XdZxOwJf5vhxUvvoK9BmBw==</Modulus>
  <Exponent>AQAB</Exponent>
</RSAKeyValue>

运行结果如图:

这里写图片描述


这里写图片描述

C#常用加密解密方法(RAS加密解密) 本节主要分享RAS加密解密:RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 阅读详情

相关推荐

基于私钥加密公钥解密的RSA算法C#实现

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。    RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100个十进制位)的函

zhilunchen的专栏 2万+

.NET RSA加密算法实现

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。在.NET中,RSA加密算法是一种常见的密钥算法,用于提供非对称加密,其中公钥用于加密,私钥用于解密。

weixin_38747097的博客 1189

ASP VBSCRIPT VBA RSA 公钥加密 私钥解密 私钥签名 公钥验签

<% '@title: Class_Crypt_Rsa '@author: ekede.com '@date: 2020-10-28 '@description: RSA 公钥加密->私钥解密 , 私钥签名->公钥验签 Class Class_Crypt_Rsa Private TAsc,objRsa Private PrivateKey_,PublicKey_ '@PrivateKey: Your personal private key. Keep thi.

todaygods的专栏 2415

.Net RSA非对称加密算法

本系列文章主要介绍如何结合BouncyCastle在 .NET Core 中使用非对称加密算法、编码算法、哈希算法、对称加密算法、国密算法等一系列算法。

ajianchina的博客 1194

C#中实现RSA生成公钥和私钥算法

在C#中,我们可以使用.NET Framework提供的加密库来生成RSA公钥和私钥。本文将详细介绍如何在C#中实现RSA生成公钥和私钥的算法,并提供相应的源代码。需要注意的是,生成的RSA密钥对是随机生成的,每次运行代码都会得到不同的密钥对。此外,上述示例代码生成的RSA密钥对都是以XML格式进行导出的,如果需要以其他格式进行导出,可以使用相应的方法进行转换。通过以上步骤,我们成功地实现了在C#中生成RSA公钥和私钥的算法。在实际应用中,密钥的安全性非常重要,需要妥善保管和管理,避免泄露。

ByteHero的博客 1912

基于.NET的RSA加密解密实现源码完整解析

非对称加密技术是现代网络安全的基石。不同于对称加密需要共享密钥的做法,非对称加密引入了公钥和私钥的概念。公钥可公开,用于加密数据;私钥必须保密,用于解密。RSA算法是应用最广泛的非对称加密算法之一。.NET框架提供了一系列加密服务,统称为.NET加密服务提供者(Cryptographic Service Providers, CSPs)。这些服务允许开发者在他们的应用程序中实现安全相关的功能,如加密、解密、散列计算和数字签名等。

weixin_42430341的博客 954

java rsa 公钥格式_JAVA,NET RSA密钥格式转换

JAVA和NET RSA密钥格式相互转换(公钥,私钥)做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的,这样就会出现秘钥不一致的情况,导致java和.net加密与解密出现障碍,首先,我们来看一下java端的私钥和公钥的样子:私钥:MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwg...

weixin_39833763的博客 745

springcloud教程 -- 1.快速搭建入门级demo,看这一篇就够了

废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片 here] 生产者:提供服务 消费者:消费服务 服务注册/发现中心:服务注册,发现,监控 所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server)

叶巨岩的博客 8万+

RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。 .NET提供常用的加密算法类,支持RSA的类是RSACryptoServiceProvid...

weixin_34415923的博客 185

agv调度系统3.0技术介绍

agv调度系统,穿梭车调度系统,调度系统技术介绍,教你做调度

持续分享调度系统开发过程 4869

零基础实战:YOLO检测头自定义替换全攻略

本文为零基础用户提供了YOLO检测头自定义替换的完整实战指南。通过将检测头比作汽车的“方向盘”,文章详细阐述了为何需要替换、如何寻找和集成新检测头模块、修改配置文件以及最终训练验证的全过程,旨在帮助用户针对特定任务(如小目标检测)提升模型性能。

perl8的博客 255

ASP.Net中RSA加密的实现

文章关键字:|ASP.Net|RSA|加密|MD5|解密|公钥|私钥|   在我们实际运用中,加密是保证数据安全的重要手段。以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密。因此需要解密数据的场合,这两种方法就不太适合了。当然你也可以自己编写适用的加密和解密程序,不过这对编写者的数学水平有很高的要求,一般人是很...

iteye_3992的博客 210

密码学:一文读懂数字证书

消息摘要算法用于验证数据完整性服务,对称加密算法和非对称加密算法用于保证数据保密性服务,数字签名算法用于抗否认性服务。数字证书集合了多种密码学算法:自身带有公钥信息,可完成相应的加密/解密操作;同时,还带有数字签名,可鉴别消息来源;且自身带有消息摘要信息,可验证证书的完整性;由于证书本身含有用户身份信息,因而具有认证性。

Shujie 2911

C# RSA 非对称加密

最近在搞单点登录的设计,在设计中需要一个Token令牌的加密传输,这个令牌在整个连接单点的各个站中起着连接认证作用,如果被仿造将会有不可预计的损失,但是这个Token是要可逆的.然后我就找.net中的各种加密,各种找。         因为是可逆的,所以像那种md5,sha之类的不可逆加密就没法用了,然后可逆的加密主要是分为对称加密盒非对称加密:         对称加密:用加密的钥匙来解密,

jasongao23的专栏 719

信息学奥赛一本通高手训练1680:序列

题目 代码 #include<cstdio> #include<iostream> #include<cmath> #define LL long long using namespace std; const LL N = 1400000+7; const LL mod = 1e9+7; int n, t; LL pos[N], sum[N], ans[N]; struct node{ LL ll, rr; }a[N]; int main(){ p

qingfeixueyue的博客 468

超详细教程YoloV8官方推荐免费数据集网站Roboflow一键导出Voc、COCO、Yolo、Csv等格式

YoloV8官方推荐了一个数据集网站,就是Roboflow。Roboflow是一个数据集管理平台,提供了免费的数据集,同时也支持上传自己的数据集进行格式转换。使用Roboflow,开发者可以方便地获取所需格式的数据集,无需手动转换格式。此外,Roboflow还提供了多种数据预处理、数据增强等功能,可帮助开发者更好地优化训练数据

Snu77的博客 2万+

.net core中使用openssl的公钥私钥进行加解密

这篇博文分享的是C#中使用OpenSSL的公钥加密/私钥解密一文中的解决方法在 .net core 中的改进。之前的博文针对的是 .NET Framework ,加解密用的是RSACryptoServiceProvider 。虽然在 corefx(.NET Core Framework) 中也有RSACryptoServiceProvider ,但它目前只支持 Windows ,不能跨平台...

weixin_34290631的博客 361

CloudCompare二次开发(1)——获取指定高程的所有点

使用CloudCompare插件实现获取点云数据中指定高程的所有点。

点云侠的博客 4735

RSA加密的测试demo

使用.net自带的RSA,需要引用System.Security.Cryptography 测试环境.net4.6 static void Main(string[] args) { var RSA = new RSACryptoServiceProvider(); var publickKey = RSA.ToXmlString(false); var p...

weixin_34037977的博客 195

43、FMCW雷达高度计仿真

本文介绍了FMCW雷达高度计的波形级建模与仿真过程,重点模拟了着陆和倾斜两种飞行场景以评估其性能。通过结合高程数据和飞行轨迹构建雷达场景,使用自定义信号处理器分析IQ样本并估计高度。结果表明,该高度计在多数情况下满足性能要求,但也存在误差较大的点,提出了地面检测算法优化的潜在方向。

neovim7hacker的博客 135

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥、一般模式【支持公钥加密,私钥解密】(一)

2019-02-26日更新:源码更新至github上。 2017-12-04日更新:增加支持微信支付。代码注释中//☆☆☆☆.NET 4.6以后特有☆☆☆☆的别用,那个不对。 RSA非对称加密。简明扼要吧,直说干货。(在此特别感谢下貳进制,提供JAVA版的公钥私钥) C#RSA加签解签加密比较常见,一般遇到的问题是非.NET代码的加签验签、加密解密。以下就是解决此类问题的。 一般情况下是【...

蜗牛水里爬 3万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# RSA加密和解密,RSA生成私钥和公钥

网上有大量RSA加密解密解决方案,包括开源Nuget包和源码,作者测试过多种方案,最后选择本文介绍的方案,简单,代码少,效率高!RsaHelper 类能够生成公钥和私钥,不需要在网上在线生成公钥和私钥啦!优秀方案,推荐给大家!

3125

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# .NET CORE .NET6 RSA 公钥加密 私钥解密

私钥格式 PKCS1,PKCS8

woaimx_1314的博客 7271

RSA加密,公钥、私钥的生成,前端使用公钥加密,JSEncrypt返回值为false的原因以及解决方法,XML转换Pkcs1、8

非对称加密算法,两个且不同的Key,一个公开,一个私密,公开加密,私密解密。特点:原文短,加密后密文长生成相对较慢安全性超强。

qq_58159494的博客 5170

C# 加签 验签 公钥 私钥 RSA数字签名

* RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 java的公钥私钥是一串字符串,.net 公钥私钥是一串XML格式字符串,两者格式不是一致的,需要转换一下才能使用,具体请参考 JAVA和NET RSA密钥格式相互转换(公钥,私钥) 使用的命名空间: using System.Security.Cryptography; usin...

zr1982930的专栏 4831
上一篇: .NET RSACryptoServiceProvider【创建公共/私有密钥对】
下一篇: .NET pfx文件解析私钥和公钥
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值