服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 少见的C# RSA算法

少见的C# RSA算法

2022-09-08 15:50蝴蝶刀刀 C#

这篇文章主要介绍了非常少见的C# RSA算法,文章简单易懂,实例代码帮助大家更好的学习,感兴趣的朋友可以了解下

当下最流行的rsa加密算法,只有公钥和私钥同时拥有才能破解加密信息,rsa加密算法的出现有利于数据安全性传输

1.c#中自带rsacryptoserviceprovider类可以让你很好的生成xml格式的公钥和私钥,两句代码就搞定

少见的C# RSA算法

2.但是生成的xml格式前端不能很好的利用和读懂,所以在生成的xml格式里需要转换成pem格式,这样才能直接copy到验证工具里加密解密,非常方便

首先,我们先导入一个第三方库,因为下面涉及到的转换代码都是需要依赖这个库来实现,导入操作如下

少见的C# RSA算法

控制台里输入

pm > install-package bouncycastle

导入到引用里面

3.好了,下面就是纯代码实现了,目的就是将xml格式转换为pem格式,无论公钥还是私钥,不罗嗦直接代码走起

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
static void main(string[] args) {
 rsacryptoserviceprovider rsa = new rsacryptoserviceprovider();  string xmlprivatekey = rsa.toxmlstring(true);//xml密钥
 string pemprivatekey = xml2pemprivate(xmlprivatekey, "f:/privatepem.txt");//pem密钥
 
 string xmlpublickey = rsa.toxmlstring(false);//xml公钥
 string pempublickey = xml2pempublic(xmlpublickey, "f:/publicpem.txt");//pem密钥
} /// <summary>
/// xml格式公钥转pem格式公钥
/// </summary>
/// <param name="xml">xml格式的公钥</param>
/// <param name="savefile">保存文件的物理路径</param>
public static string xml2pempublic(string xml, string savefile) {  var rsa = new rsacryptoserviceprovider();
 rsa.fromxmlstring(xml);  var p = rsa.exportparameters(false);
 rsakeyparameters key = new rsakeyparameters(false, new biginteger(1, p.modulus), new biginteger(1, p.exponent));  using (var sw = new streamwriter(savefile))
 {  var pemwriter = new org.bouncycastle.openssl.pemwriter(sw);
 pemwriter.writeobject(key);
 }
 
 subjectpublickeyinfo publickeyinfo = subjectpublickeyinfofactory.createsubjectpublickeyinfo(key);  byte[] serializedpublicbytes = publickeyinfo.toasn1object().getderencoded();  string publickey = convert.tobase64string(serializedpublicbytes);  return format(publickey, 1);
} /// <summary>
/// xml格式私钥转pem
/// </summary>
/// <param name="xml">xml格式私钥</param>
/// <param name="savefile">保存文件的物理路径</param>
public static string xml2pemprivate(string xml, string savefile) {  var rsa = new rsacryptoserviceprovider();
 rsa.fromxmlstring(xml);  var p = rsa.exportparameters(true);  var key = new rsaprivatecrtkeyparameters(  new biginteger(1, p.modulus), new biginteger(1, p.exponent), new biginteger(1, p.d),  new biginteger(1, p.p), new biginteger(1, p.q), new biginteger(1, p.dp), new biginteger(1, p.dq),  new biginteger(1, p.inverseq));  using (var sw = new streamwriter(savefile))
 {  var pemwriter = new org.bouncycastle.openssl.pemwriter(sw);
 pemwriter.writeobject(key);
 }
 
 privatekeyinfo privatekeyinfo = privatekeyinfofactory.createprivatekeyinfo(key);  byte[] serializedprivatebytes = privatekeyinfo.toasn1object().getencoded();  string privatekey = convert.tobase64string(serializedprivatebytes);  return format(privatekey, 2);
} /// <summary>
/// 格式化公钥/私钥
/// </summary>
/// <param name="key">生成的公钥/私钥</param>
/// <param name="type">1:公钥 2:私钥</param>
/// <returns>pem格式的公钥/私钥</returns>
public static string format(string key, int type) {  string result = string.empty;  int length = key.length / 64;  for (int i = 0; i < length; i++)
 int start = i * 64;
 result = result + key.substring(start, 64) + "\r\n";
 }
 
 result = result + key.substring(length * 64);  if (type == 1)
 {
 result = result.insert(0, "-----begin public key-----\r\n");
 result += "\r\n-----end public key-----";
 if (type == 2)
 {
 result = result.insert(0, "-----begin private key-----\r\n");
 result += "\r\n-----end private key-----";
 return result;
}

4.最后输出在f盘的txt文件里面就是可以直接用来copy到验证工具里面直接加密/解密数据用的

人说,如果你很想要一样东西,就放它走 。如果它回来找你,那么它永远都是你的。要是它没有回来,那么不用再等了,因为它根本就不是你的。 ——伊恩·麦克尤恩

以上就是少见的c# rsa算法的详细内容,更多关于c# rsa算法的资料请关注服务器之家其它相关文章!

原文链接:https://www.imooc.com/article/68672

延伸 · 阅读

精彩推荐
  • C#C#实现动态数据绘图graphic的方法示例

    C#实现动态数据绘图graphic的方法示例

    这篇文章主要介绍了C#实现动态数据绘图graphic的方法,结合实例形式分析了C#根据动态数据绘制2D数据表格的相关操作技巧,需要的朋友可以参考下...

    5t4rk6282022-01-21
  • C#c# Winform自定义控件-仪表盘功能

    c# Winform自定义控件-仪表盘功能

    这篇文章主要介绍了c#Winform自定义控件-仪表盘功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    冰封一夏10662022-08-05
  • C#适合初学者开发的C#在线英汉词典小程序

    适合初学者开发的C#在线英汉词典小程序

    这篇文章主要为大家详细介绍了适合初学者开发的C#在线英汉词典小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    毕毕love丹丹7122021-12-07
  • C#C#中backgroundworker的使用教程

    C#中backgroundworker的使用教程

    这篇文章主要介绍了C#中backgroundworker的使用教程,在文中有两点需要注意的,大家可以看下...

    秋漓10112022-02-23
  • C#使用MSScriptControl 在 C# 中读取json数据的方法

    使用MSScriptControl 在 C# 中读取json数据的方法

    下面小编就为大家带来一篇使用MSScriptControl 在 C# 中读取json数据的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看...

    C#教程网5532021-12-22
  • C#简单对比C#程序中的单线程与多线程设计

    简单对比C#程序中的单线程与多线程设计

    这篇文章主要介绍了C#程序中的单线程与多线程设计的简单对比,通过实际的代码演示可以清晰看出多线程并发来避免单线程阻塞问题的特点,需要的朋友可以...

    剑萧舞蝶7832021-11-19
  • C#C# 开发step步骤条控件详解

    C# 开发step步骤条控件详解

    本篇文章主要介绍了用C#来实现一个step控件的方法步骤,具有很好的参考价值。下面跟着小编一起来看下吧...

    JackWang-CUMT7712021-12-28
  • C#非常实用的C#字符串操作处理类StringHelper.cs

    非常实用的C#字符串操作处理类StringHelper.cs

    这篇文章主要为大家详细介绍了非常实用的C#字符串操作处理类StringHelper.cs,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    sanler7832022-01-17