欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

少見的C# RSA算法

 更新時間:2020年06月02日 16:40:44   作者:蝴蝶刀刀  
這篇文章主要介紹了非常少見的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算法的資料請關注腳本之家其它相關文章!

相關文章

  • C# WinForm控件對透明圖片重疊時出現圖片不透明的簡單解決方法

    C# WinForm控件對透明圖片重疊時出現圖片不透明的簡單解決方法

    這篇文章主要介紹了C# WinForm控件對透明圖片重疊時出現圖片不透明的簡單解決方法,結合實例形式分析了WinForm圖片重疊后造成圖片不透明的原因與相應的解決方法,需要的朋友可以參考下
    2016-06-06
  • C#實現學生管理系統

    C#實現學生管理系統

    這篇文章主要為大家詳細介紹了C#實現學生管理系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 淺析WPF中ToolTip工具提示的應用

    淺析WPF中ToolTip工具提示的應用

    在日常應用中,當鼠標放置在某些控件上時,都會有相應的信息提示,從軟件易用性上來說,這是一個非常友好的功能設計,本文就來和大家簡單聊聊WPF中ToolTip工具提示的相關使用,有興趣的可以了解下
    2023-12-12
  • C#過濾DataTable中空數據和重復數據的示例代碼

    C#過濾DataTable中空數據和重復數據的示例代碼

    這篇文章主要給大家介紹了關于C#過濾DataTable中空數據和重復數據的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 秒表計時器以及STOPWATCH(實例講解)

    秒表計時器以及STOPWATCH(實例講解)

    下面小編就為大家分享一篇秒表計時器以及STOPWATCH(實例講解),具有很好的參考價值,希望對大家有所幫助
    2017-11-11
  • PC藍牙通信C#代碼實現

    PC藍牙通信C#代碼實現

    這篇文章主要為大家詳細介紹了PC藍牙通信C#代碼實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C#實現網絡通信共享庫NetShare的使用示例

    C#實現網絡通信共享庫NetShare的使用示例

    本文主要介紹了C#實現網絡通信共享庫NetShare,網絡通信共享庫NetShare用于保證客戶端與服務器通信數據包的規(guī)范和統一,感興趣的可以了解一下
    2023-11-11
  • 使用C#的正則表達式驗證中文字符(實例代碼)

    使用C#的正則表達式驗證中文字符(實例代碼)

    本文通過實例代碼給大家介紹了使用C#的正則表達式驗證中文字符的方法,需要的的朋友參考下吧
    2017-07-07
  • C#開發(fā)Winform實現文件操作案例

    C#開發(fā)Winform實現文件操作案例

    這篇文章介紹了C#開發(fā)Winform實現文件操作的案例,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#中實現AES算法加密解讀

    C#中實現AES算法加密解讀

    這篇文章主要介紹了C#中實現AES算法加密實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論