C# 调用BouncyCastle生成PEM格式的私钥和公钥 , 加密解密 PKCS#1

本文主要是介绍C# 调用BouncyCastle生成PEM格式的私钥和公钥 , 加密解密 PKCS#1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引用第三方类库 BouncyCastle 

nuget:  https://www.nuget.org/packages/BouncyCastle

网址: http://www.bouncycastle.org/csharp/index.html

1.生成 pem  私钥

TextWriter textWriter = new StringWriter();
PemWriter pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(keys.Private);
pemWriter.Writer.Flush();string privateKey = textWriter.ToString();

//公钥

 TextWriter textpubWriter = new StringWriter();PemWriter pempubWriter = new PemWriter(textpubWriter);pempubWriter.WriteObject(keys.Public);pempubWriter.Writer.Flush();string pubKey = textpubWriter.ToString();

生成结果

公钥:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDzNqPhq2nk1aIsIK30X7UAHC5
jNqVKk12ZxsVEOjPFajV82VuJ7a31uLtU3NWRN4SIzhXmhAiptiDXq04AReV6veh
3xdI069xmsIx/EEJNHnL034is6gSVev8p7wJ+qevxdYUGaMVgAV6osYAeQhMTTld
emiiriKVAoeezhs5fQIDAQAB
-----END PUBLIC KEY-----

私钥

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCDzNqPhq2nk1aIsIK30X7UAHC5jNqVKk12ZxsVEOjPFajV82Vu
J7a31uLtU3NWRN4SIzhXmhAiptiDXq04AReV6veh3xdI069xmsIx/EEJNHnL034i
s6gSVev8p7wJ+qevxdYUGaMVgAV6osYAeQhMTTldemiiriKVAoeezhs5fQIDAQAB
AoGAC5l5psx1Xg+WiKmLZ5gb1f0P7q4zbCtXILnxGG9VJFySPMb5QOX+RVTqwqfn
uUqOuZpSuOSWa1mAKdepEQoixCIBTbG8THhbXi5/vdN4FMUXmHBe1Gage0HFE5Ep
EMGpFuGZW9PmXG5m78gkTwc/cYJYWSA6I9AMWJ8rBGfti/UCQQC9ehPq0wFV8icL
qcW3HlNsPzpqKPWFKp9UWz8kB6ayyTX9pci02Rp4Fig3i625+eMnJ+Kq0DRVGeJE
4auCugb7AkEAshLgdDxnvQVbPFJvxF8yAZe3Tu4L2vbEA55wqnEdHMUSnHERXO72
9Uk1t2n5v67xIksGewyZ0X6x/7wbsg035wJAR+0FjoiW4zdPFyBVS5QZeuftlssB
mJF7dhxFNbopz4iOFEFQlUYsxBU1IxDE2+o+DmkXpFvw4bU3rYo0/yT67QJAQcpR
nQA4P5C8DYRTgNS+7/Gyqvmt7Z8f+kpOS9pwrBFvd9caWCB9o1ACBZqkyBoFQus/
ILUeG1VYxCgmf1j83wJBAK1ETGDQM9LPOZAtB7Idv1Xo4sJtDn90yIyjhJjE6hhA
pvGGRb/1aOB1DMrx3JweIUB7rKMpkGVcouFIO4/s9cU=
-----END RSA PRIVATE KEY-----

2. 使用pem 证书解密或解密.  公钥私钥类型不一样

使用公钥加解密:

 
using (TextReader reader = new StringReader(pubkeyPemString}))  
{var enType=true; //加密true  解密 false;var key = new Org.BouncyCastle.OpenSsl.PemReader(reader).ReadObject() as AsymmetricKeyParameter;var rsa = new RsaEngine();rsa.Init(enType, key);  var data = Encoding.UTF8.GetBytes(tb_input.Text);entData = rsa.ProcessBlock(data, 0, data.Length);tb_output.Text = "加密: \r\n\r\n" + Encoding.UTF8.GetString(entData);}

使用 私钥加解密:  私钥中带有公钥信息.解析出来的是密钥对AsymmetricCipherKeyPair

using (TextReader reader2 = new StringReader(tb_privitekey.Text))
{dynamic key = new Org.BouncyCastle.OpenSsl.PemReader(reader2).ReadObject();var rsa2 = new RsaEngine();if (key is AsymmetricKeyParameter){key = (AsymmetricKeyParameter)key;}else if(key is AsymmetricCipherKeyPair){key = ((AsymmetricCipherKeyPair)key).Private;}rsa2.Init(false, key);  //加密true 解密 false//entData 待加密解密的 串 byte[] entData= Encoding.UTF8.GetBytes(tb_input.Text);entData = rsa2.ProcessBlock(entData, 0, entData.Length);tb_output.Text += "解密:\r\n \r\n" + Encoding.UTF8.GetString(entData);
}

参考文章:

 c#.net 调用BouncyCastle生成PEM格式的私钥和公钥 https://www.cnblogs.com/runliuv/p/5965951.html




这篇关于C# 调用BouncyCastle生成PEM格式的私钥和公钥 , 加密解密 PKCS#1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090735

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log