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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.