亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中RSA算法的詳解

發布時間:2020-07-18 17:19:57 來源:億速云 閱讀:278 作者:小豬 欄目:編程語言

這篇文章主要講解了C#中RSA算法的詳解,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

當下最流行的RSA加密算法,只有公鑰和私鑰同時擁有才能破解加密信息,RSA加密算法的出現有利于數據安全性傳輸

1.C#中自帶RSACryptoServiceProvider類可以讓你很好的生成XML格式的公鑰和私鑰,兩句代碼就搞定

C#中RSA算法的詳解

2.但是生成的XML格式前端不能很好的利用和讀懂,所以在生成的XML格式里需要轉換成PEM格式,這樣才能直接Copy到驗證工具里加密解密,非常方便

首先,我們先導入一個第三方庫,因為下面涉及到的轉換代碼都是需要依賴這個庫來實現,導入操作如下

C#中RSA算法的詳解

控制臺里輸入

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算法的詳解有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

rsa
AI

台南县| 高唐县| 濉溪县| 禄丰县| 镇巴县| 洪泽县| 芦溪县| 莱阳市| 嘉荫县| 张家港市| 屯门区| 杂多县| 屏山县| 黄冈市| 邢台市| 揭西县| 乌海市| 稻城县| 博湖县| 铜山县| 林州市| 锦屏县| 同仁县| 阜城县| 任丘市| 河西区| 阿荣旗| 房产| 安图县| 镶黄旗| 潼关县| 镇巴县| 栖霞市| 图片| 威远县| 莱芜市| 大余县| 宣化县| 汨罗市| 外汇| 噶尔县|