Asp.Net 常用工具類之加密——非對稱加密RSA算法(1)


    

 

 

    踏入程序員這個行業也有幾年了,幾年中有收獲(技術加強),有付出(時間和亞健康狀態)。當然喏,並不后悔,代碼路還長!!!

 

    On The Way,永不止步!!!

 

    開發過程中也積累了一些自己的經驗、代碼塊和幫助類,有了這些,確實方便了之后的開發流程,同時也縮小了開發周期,詳情看圖(一小部分),這些都是最近結合開發常見的方法一行行寫出來,並且也用到了相關項目,現在看起來還是有點點的小興奮!

             

    當然喏,我還是個新人,需要園子里的老人多多指點,尤其是在代碼質量和技術方面,您們的指點感激不盡,也是我前進的方向! 

 

Asp.Net 常用工具類之加密——非對稱加密RSA算法

自用幫助類

准備分周期進行講解和分析,望大家共勉!!!

 

今天咱們就從加解密開始講起吧,哈哈。

 

在開發過程中,各種加密方式層出不窮,有對稱加密,非對稱加密;當然喏,密碼也分為可逆,不可逆

 

在c#中,非對稱加密以RSA算法為代表,利用公鑰,私鑰方式進行加解密。

 

加密過程中需要針對密鑰長度進行設置,保證密鑰的長度可行性。密鑰長度:512,1024,2048,4096,8192。

 

RSA加密算法流程如下:

 

1、首先 【系統】 生成一對密鑰,即私鑰和公鑰

 

2、然后,【系統】 將公鑰發送給 【用戶】

 

3、【用戶】用收到的公鑰對數據加密,再發送給【系統】

 

4、【系統】 收到數據后,使用自己的私鑰解密,返回密碼

 

由於在非對稱算法中,公鑰加密的數據必須用對應的私鑰才能解密,而私鑰又只有接收方自己知道,這樣就保證了數據傳輸的安全性。

 

理論性比較強,下面通過一個DEMO進行代碼的演示:

 

public static class RSA
{
/// <summary>
/// 生成密鑰
/// <param name="PrivateKey">私鑰</param>
/// <param name="PublicKey">公鑰</param>
/// <param name="KeySize">密鑰長度:512,1024,2048,4096,8192</param>
/// </summary>
public static void Generator(out string PrivateKey, out string PublicKey, int KeySize = 2048)
{
  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(KeySize);
  PrivateKey = rsa.ToXmlString(true); //將RSA算法的私鑰導出到字符串PrivateKey中 參數為true表示導出私鑰 true 表示同時包含 RSA 公鑰和私鑰;false 表示僅包含公鑰。
  PublicKey = rsa.ToXmlString(false); //將RSA算法的公鑰導出到字符串PublicKey中 參數為false表示不導出私鑰 true 表示同時包含 RSA 公鑰和私鑰;false 表示僅包含公鑰。
}
/// <summary>
/// RSA加密 將公鑰導入到RSA對象中,准備加密
/// </summary>
/// <param name="PublicKey">公鑰</param>
/// <param name="encryptstring">待加密的字符串</param>
public static string RSAEncrypt(string PublicKey, string encryptstring)
{
  byte[] PlainTextBArray;
  byte[] CypherTextBArray;
  string Result;
  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  rsa.FromXmlString(PublicKey);
  PlainTextBArray = (new UnicodeEncoding()).GetBytes(encryptstring);
  CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
  Result = Convert.ToBase64String(CypherTextBArray);
  return Result;
}
/// <summary>
/// RSA解密 將私鑰導入RSA中,准備解密
/// </summary>
/// <param name="PrivateKey">私鑰</param>
/// <param name="decryptstring">待解密的字符串</param>
public static string RSADecrypt(string PrivateKey, string decryptstring)
{
  byte[] PlainTextBArray;
  byte[] DypherTextBArray;
  string Result;
  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  rsa.FromXmlString(PrivateKey);
  PlainTextBArray = Convert.FromBase64String(decryptstring);
  DypherTextBArray = rsa.Decrypt(PlainTextBArray, false);
  Result = (new UnicodeEncoding()).GetString(DypherTextBArray);
  return Result;
}
}
調用方式:
static void Main(string[] args)
{
  string PrivateKey = "";
  string PublicKey = "";
  RSA.Generator(out PrivateKey, out PublicKey, 1024);
  var aaa = RSA.RSAEncrypt(PublicKey, "123456789");
  var bbb = RSA.RSADecrypt(PrivateKey, aaa);
}

 

OK,各位看官,這一期的文章非對稱加密寫到這里喏,感謝大家的支持,您的支持是我的動力!

下一期給大家帶來的是常用的對稱加密幾種方式,敬請期待!!!

 

個人頭條號: http://www.toutiao.com/c/user/3213034222/#mid=4129397771

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM