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# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL