首页 > 编程语言 >C#生成RSA非对称加密公钥私钥以及加密解密

C#生成RSA非对称加密公钥私钥以及加密解密

时间:2024-06-18 16:44:36浏览次数:11  
标签:Convert 公钥 加密 string C# rsa testOutputHelper var

using System.Security.Cryptography;
using System.Text;
using Xunit.Abstractions;

namespace xUnit.Tests
{
    /// <summary>
    /// 
    /// </summary>
    public class RsaKeyPairGenerator
    {
        private readonly ITestOutputHelper _testOutputHelper;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="testOutputHelper"></param>
        public RsaKeyPairGenerator(ITestOutputHelper testOutputHelper)
        {
            _testOutputHelper = testOutputHelper;
        }

        /// <summary>
        /// 
        /// </summary>
        [Fact]
        public void GenerateRsaKeyPair()
        {
            // 1. 生成RSA密钥对  
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024))
            {
                // 1.获取公钥和私钥  
                byte[] publicKeyBytes = rsa.ExportSubjectPublicKeyInfo(); // 公钥X.509格式生成  
                byte[] privateKeyBytes = rsa.ExportPkcs8PrivateKey();     // 私钥以PKCS#8格式生成

                string publicKey = Convert.ToBase64String(publicKeyBytes);
                var privateKey = Convert.ToBase64String(privateKeyBytes);
                _testOutputHelper.WriteLine("公钥:" + publicKey);
                _testOutputHelper.WriteLine("私钥:" + privateKey);

                // 2.加密
                string original = "Hello, RSA!";
                var encrypted = Encrypt(publicKey, original);
                _testOutputHelper.WriteLine("Encrypted: " + encrypted);

                // 3. 解密  
                var decrypted = Decrypt(privateKey, encrypted);
                _testOutputHelper.WriteLine("Decrypted: " + decrypted);
            }
        }

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="publicKey"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public string Encrypt(string publicKey, string data)
        {
            var publicKeyBytes = Convert.FromBase64String(publicKey);
            using (var rsa = System.Security.Cryptography.RSA.Create())
            {
                rsa.ImportSubjectPublicKeyInfo(publicKeyBytes, out int bytesRead);
                // 使用公钥加密数据(这里使用PKCS#1 v1.5填充)  
                byte[] encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(data), RSAEncryptionPadding.Pkcs1);

                // 输出加密后的数据(通常为Base64编码)  
                return Convert.ToBase64String(encryptedData);
            }
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="privateKey"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public string Decrypt(string privateKey, string data)
        {
            var privateKeyBytes = Convert.FromBase64String(privateKey);
            using (var rsa = System.Security.Cryptography.RSA.Create())
            {
                rsa.ImportPkcs8PrivateKey(privateKeyBytes, out int bytesRead);

                return Encoding.UTF8.GetString(rsa.Decrypt(Convert.FromBase64String(data), System.Security.Cryptography.RSAEncryptionPadding.Pkcs1));
            }
        }
    }
}

 

标签:Convert,公钥,加密,string,C#,rsa,testOutputHelper,var
From: https://www.cnblogs.com/zjbky/p/18254660

相关文章

  • 揭秘In-Context Learning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示
    揭秘In-ContextLearning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示例设计、ICL机制详解]自GPT-3首次提出了In-ContextLearning(ICL)的概念而来,ICL目前已经变成了一种经典的LLMs使用方法。ICL,即In-ContextLearning,是一种让大型语言模型(LLMs)通过少量标注样本在......
  • CPU指令集——bayer抽取r、g、b三通道(含镜像)
    需求1:在高帧率场景下,一般拿到的是bayer格式数据。图像处理时,一般会先插值成rgb,再拆分为单通道。如果可以直接bayer中抽出r、g、b,那效率将大大提升。需求2:抽取的单通道直接是镜像的注意:抽取后r、g、b尺寸是原来的一半,没有做插值(插值只会让数据量变大,并没有引入有效信息)效果:CPU指......
  • 3、17算法学习(1)存在的问题(c中如何表示大、小顶堆)
    二路归并、逆序对多路归并,堆栈1、多路归并模板先将数据读入堆栈,然后取栈顶的最大值或最小值,最后再根据公式进行递推求出需要添加的元素。题目:https://www.acwing.com/problem/content/description/1264/https://www.acwing.com/problem/content/148/模板:intwork(intn......
  • AI写作与论文辅助:10款PC端AI工具的创新应用
    我看大家都推荐的差不多了,常见好用的PC软件就那些,我不想反复“咀嚼”了,我想另辟蹊径推荐点不一样的,比如10款PC端的AI网站。AI已经全方位“侵入”我们的生活,从AI写作到AI绘画,从AI视频到AI语音,AI无所不包。真正学会用好AI神器,可以解决我们生活中很多烦恼。一、bilingAI写作直达......
  • OpenStack一键安装部署与配置(全网最详细)
    一,安装环境准备(步骤比较多,建议搭建合理利用虚拟机快照)下载Linux操作系统CentOS7.9镜像:http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso;1.创建在VMware中创建实验用的虚拟机实例。CPU2x2,(开启虚拟化引擎),内存4G以上,硬盘80G,NAT网络模式......
  • 掌握Select类,轻松实现下拉列表定位
    在Web自动化测试中,我们经常需要操作网页上的下拉列表。在Python的Selenium库中,提供了Select类来方便地处理下拉列表。本文将详细介绍如何使用Select类来实现下拉列表的定位和操作。示例代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><titl......
  • AI写作工具集:提升你的学术与创意写作的10款PC软件
    我看大家都推荐的差不多了,常见好用的PC软件就那些,我不想反复“咀嚼”了,我想另辟蹊径推荐点不一样的,比如10款PC端的AI网站。AI已经全方位“侵入”我们的生活,从AI写作到AI绘画,从AI视频到AI语音,AI无所不包。真正学会用好AI神器,可以解决我们生活中很多烦恼。一、bilingAI写作直达......
  • DolphinScheduler日志乱码、worker日志太多磁盘报警、版本更新导致不兼容怎么办?
    作者|刘宇星本文作者总结了在使用ApacheDolphinScheduler过程中遇见过的常见问题及其解决方案,包括日志出现乱码、worker日志太多磁盘报警、版本更新导致不兼容问题等,快来看看有没有困扰你想要的答案吧!DolphinScheduler集群环境有多台worker(worker1,worker2,worker3),多个......
  • 2024最新可用Adobe全家桶 Photoshop Mac直装版
    现在网上的Mac版都无法使用了,原因是由于补丁更新的速度,没有跟上软件的发布版本,导致所有版本无法成功使用。 这个是目前最完美版本,而且是直装版,不用任何折腾,点几下鼠标就可以安装完成使用了。 全家桶直装版包含:AdobeIllustrator、AdobeAcrobatProDC、AdobePremiereP......
  • go使用opentelemetry+jaeger---grpc
    clientpackagemainimport( "context" "fmt" "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.op......