少见的C# RSA算法

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

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

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

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

控制台里输入

PM > Install-Package BouncyCastle

导入到引用里面

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

 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算法的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#实现简单的RSA非对称加密算法示例

    本文实例讲述了C#实现简单的RSA非对称加密算法.分享给大家供大家参考,具体如下: 界面控件 namespace RSA算法 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary

  • 同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    前言 我们在Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都是收费的),成本较高.那么问题来了,如果对web提交的敏感数据进行加密呢?web应用中,前端的数据处理和交互基本上都是靠javascript来完成,后台的逻辑处理可以C#(java)等进行处理. 微软的C#中虽然有RSA算法,但是格式和OpenSSL生成的公钥/私钥文件格式并不兼容.这个

  • 基于私钥加密公钥解密的RSA算法C#实现方法

    本文实例讲述了基于私钥加密公钥解密的RSA算法C#实现方法,是一种应用十分广泛的算法.分享给大家供大家参考之用.具体方法如下: 一.概述 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一.RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价. RSA的安全性依赖于大数分解.公钥和私钥都是两个大素数( 大于 1

  • 少见的C# RSA算法

    当下最流行的RSA加密算法,只有公钥和私钥同时拥有才能破解加密信息,RSA加密算法的出现有利于数据安全性传输 1.C#中自带RSACryptoServiceProvider类可以让你很好的生成XML格式的公钥和私钥,两句代码就搞定 2.但是生成的XML格式前端不能很好的利用和读懂,所以在生成的XML格式里需要转换成PEM格式,这样才能直接Copy到验证工具里加密解密,非常方便 首先,我们先导入一个第三方库,因为下面涉及到的转换代码都是需要依赖这个库来实现,导入操作如下 控制台里输入 PM > I

  • 使用python实现rsa算法代码

    RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名. 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息.她可以用以下的方式来产生一个公钥和一个私钥: 随意选择两个大的质数p和q,p不等于q,计算N=pq. 根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1) 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1) 用以下这个公式计算d:d × e ≡ 1 (mod (p-1)(

  • JAVA 中解密RSA算法JS加密实例详解

    JAVA 中解密RSA算法JS加密实例详解 有这样一个需求,前端登录的用户名密码,密码必需加密,但不可使用MD5,因为后台要检测密码的复杂度,那么在保证安全的前提下将密码传到后台呢,答案就是使用RSA非对称加密算法解决 . java代码 需要依赖 commons-codec 包 RSACoder.Java import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.

  • java 加密之RSA算法加密与解密的实例详解

    java 加密之RSA算法加解密与解密的实例详解 前言: RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名.RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法. RSA的安全基于大数分解的难度.其公钥和私钥是一对大素数(100到200位十进制数或更大)的函

  • Python 25行代码实现的RSA算法详解

    本文实例讲述了Python 25行代码实现的RSA算法.分享给大家供大家参考,具体如下: 网络上很多关于RSA算法的原理介绍,但是翻来翻去就是没有一个靠谱的算法实现,即使有代码介绍,也都是直接调用JDK或者Python代码包中的API实现,或者即使有代码也都写得特别烂.无形中让人感觉RSA加密算法竟然这么高深,然后就看不下去了.还有我发现对于"大整数的幂次乘方取模"竟然采用直接计算的幂次的值,再取模,类似于(2 ^ 1024) ^ (2 ^ 1024),这样的计算就直接去计算了,我不知

  • Java实现RSA算法的方法详解

    本文实例讲述了Java实现RSA算法的方法.分享给大家供大家参考,具体如下: 一 介绍 唯一广泛接受并实现 用于数据加密和数字签名 公钥加密.私钥解密 私钥加密.公钥解密 二 RSA参数说明 三 实现 package com.imooc.security.rsa; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.sec

  • PHP封装的非对称加密RSA算法示例

    本文实例讲述了PHP封装的非对称加密RSA算法.分享给大家供大家参考,具体如下: 将php的openssl扩展中的非对称加密函数封装成一个Rsa类. 需要注意的是,在windows上,需要打开openssl的配置文件,请参照官方的openssl扩展安装文档. 在windows上安装openssl扩展 1.将php路径下的两个库文件libeay32.dll和ssleay32.dll复制到操作system32下 2.配置openssl配置文件的位置,在php的路径下,有文件extras/openss

  • jmeter接口测试之使用rsa算法加密解密的代码

    本篇介绍jmeter 使用rsa算法进行加密参数 如果测试过程中,部分接口采用了rsa加密算法,我们的jmeter 也是可以直接拿来调用的,不需要开发配合去掉加密代码! 直接上代码 import org.apache.commons.codec.binary.Base64; import java.io.ByteArrayOutputStream; import java.security.Key; import java.security.KeyFactory; import java.sec

  • python密码学RSA算法及秘钥创建教程

    目录 RSA算法 步骤1:生成RSA模数 步骤2:派生数(e) 步骤3:公钥 步骤4:私钥 加密公式 解密公式 生成RSA密钥 生成RSA密钥的算法 Cryptomath模块 RabinMiller模块 生成RSA密钥的完整代码如下: RSA算法 RSA算法是一种公钥加密技术,被认为是最安全的加密方式.它是由Rivest,Shamir和Adleman于1978年发明的,因此命名为 RSA 算法. RSA算法具有以下特征 : RSA算法是包含素数的整数在有限域中的一种流行取幂./p> 此方法使用的

随机推荐