踏入程序員這個行業也有幾年了,幾年中有收穫(技術增強),有付出(時間和亞健康狀態)。固然喏,並不後悔,代碼路還長!!!程序員
On The Way,永不止步!!!算法
開發過程當中也積累了一些本身的經驗、代碼塊和幫助類,有了這些,確實方便了以後的開發流程,同時也縮小了開發週期,詳情看圖(一小部分),這些都是最近結合開發常見的方法一行行寫出來,而且也用到了相關項目,如今看起來仍是有點點的小興奮!c#
固然喏,我仍是個新人,須要園子裏的老人多多指點,尤爲是在代碼質量和技術方面,您們的指點感激涕零,也是我前進的方向! 安全
自用幫助類ide
準備分週期進行講解和分析,望你們共勉!!!工具
今天我們就從加解密開始講起吧,哈哈。加密
在開發過程當中,各類加密方式層出不窮,有對稱加密,非對稱加密;固然喏,密碼也分爲可逆,不可逆。spa
在c#中,非對稱加密以RSA算法爲表明,利用公鑰,私鑰方式進行加解密。code
加密過程當中須要針對密鑰長度進行設置,保證密鑰的長度可行性。密鑰長度:512,1024,2048,4096,8192。對象
RSA加密算法流程以下:
一、首先 【系統】 生成一對密鑰,即私鑰和公鑰
二、而後,【系統】 將公鑰發送給 【用戶】
三、【用戶】用收到的公鑰對數據加密,再發送給【系統】
四、【系統】 收到數據後,使用本身的私鑰解密,返回密碼
因爲在非對稱算法中,公鑰加密的數據必須用對應的私鑰才能解密,而私鑰又只有接收方本身知道,這樣就保證了數據傳輸的安全性。
理論性比較強,下面經過一個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