如何在ASP.Net中實現RSA加密

来源:http://www.cnblogs.com/aspnetjia/archive/2016/01/27/5162653.html
-Advertisement-
Play Games

在我們實際運用中,加密是保證數據安全的重要手段。以前使用ASP時,對數據加密可以使用MD5和SHA1演算法,這兩種演算法雖然快捷有效,但是無法對通過它們加密的密文進行反運算,即是解密。因此需要解密數據的場合,這兩種方法就不太適合了。當然你也可以自己編寫適用的加密和解密程式,不過這對編寫者的數學水平有很高...


在我們實際運用中,加密是保證數據安全的重要手段。以前使用ASP時,對數據加密可以使用MD5和SHA1演算法,這兩種演算法雖然快捷有效,但是無法對通過它們加密的密文進行反運算,即是解密。因此需要解密數據的場合,這兩種方法就不太適合了。當然你也可以自己編寫適用的加密和解密程式,不過這對編寫者的數學水平有很高的要求,一般人是很難做到的。

  現在,隨著ASP.Net的推出,徹底改變了以前ASP下的編程模式。我們能夠利用.Net Framework中的類提供的加密服務來保證數據安全。目前應用較為廣泛的加密方法是使用RSA演算法進行加密。在.Net Framework中與RSA加密演算法相關的類主要有兩個:RSA 類和RSACryptoServiceProvider 類。按照MSDN的說法RSA 類是“表示 RSA 演算法的所有實現均從中繼承的基類”,而RSACryptoServiceProvider 類是“使用加密服務提供程式 (CSP) 提供的 RSA 演算法的實現執行不對稱加密和解密”。另外,“表示 RSA 演算法的標準參數”的RSAParameters 結構也是很重要的,它保存了RSA演算法的參數。

  由於介紹RSA演算法原理的文章或書籍比較多,大家可以參閱一下,在此就不覆述了。下麵著重介紹一下如何在ASP.Net中實現RSA加密。

  RSA參數的產生:RSA參數的類型就是上面提到的RSAParameters 結構,查閱MSDN可知其包含了D、DP、DQ、Exponent、InverseQ、Modulus、P、Q八個欄位。加密時僅需要Exponent和Modulus兩個值,可看成公鑰。解密時所有欄位都需要,可看成私鑰。下麵這段程式顯示瞭如何產生RSA兩個參數:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
  RSAParameters rsaParamsExcludePrivate=rsa.ExportParameters(false); 
  RSAParameters rsaParamsIncludePrivate=rsa.ExportParameters(true);

  RSACryptoServiceProvider類的ExportParameters(bool)方法用於導出RSA參數,true表示導出上述八個欄位的“私鑰”,false表示導出“公鑰”。

  使用RSA參數進行加密解密:這一步需要把上面兩個參數導入到RSACryptoServiceProvider類對象中,再用它對數據進行加密。如下麵的代碼所示,我們可以寫一個函數來完成加密過程:

Public byte [ ] RSAEncrypt ( byte [ ] b) 
  { 
  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
  rsa.ImportParameters(rsaParamsExcludePrivate); //導入公鑰 
  byte [] EncryptedData=rsa.Encrypt(DataToEncrypt,false); 
  return EncryptedData; 
  }

  解密時只要把rsa.ImportParameters(rsaParamsExcludePrivate)換成rsa.ImportParameters(rsaParamsExcludePrivate),再把Encrypt換成Decrypt就行了。

  保存和載入RSA參數:RSA參數可以保存為XML格式,下麵代碼說明瞭如何保存和載入(只列出了關鍵部分)

  保存:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
  StreamWriter writer=new StreamWriter(@"d:\PublicAndPrivateKey.xml"); 
  string PPKeyXml=rsa.ToXmlString(true);//保存私鑰 
  writer.Write(PPKeyXml); 
  writer.Close(); 
  writer=new StreamWriter(@"d:\PublicKey.xml"); 
  string PKeyXml=rsa.ToXmlString(false);//保存公鑰 
  writer.Write(PKeyXml); 
  writer.Close();

  讀取:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
  StreamReader reader=new StreamReader(@"d:\PublicKey.xml"); 
  string PKey=reader.ReadToEnd(); 
  rsa.FromXmlString(PKey); 
  reader.Close(); 
  StreamReader reader=new StreamReader(@"d:\PublicAndPrivateKey.xml"); 
  string PPKey=reader.ReadToEnd(); 
  reader.Close();

  ToXmlString和ExportParameters方法類似,false表示保存“公鑰”,true表示保存“私鑰”。

  以上就是在ASP.Net中實現RSA加密的主要方法。

轉載自:http://www.aspnetjia.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文由ilanniweb提供友情贊助,首發於爛泥行天下 想要獲得更多的文章,可以關註我的微信ilanniweb 公司的業務現在已經擴展到海外,對外提供的統一介面都是通過功能變數名稱來解析的,但是海外用戶訪問國內介面的話,你懂的,很慢的。為了提高功能變數名稱解析的速度,打算使用智能DNS功能,來解決海外用戶功能變數名稱解析慢...
  • linux 下,我們常使用 cd ,grep,vi 等命令,有時候我們要查到這些命令所在的位置,如何做呢?linux下有2個命令可完成該功能:which ,whereiswhich 用來查看當前要執行的命令所在的路徑。whereis 用來查看一個命令或者文件所在的路徑,which命令的原理:在PAT...
  • 1.查看內核版本cat /proc/version[xingxing.dxx@30_28_6_20 ~]$ cat /proc/versionLinux version 2.6.32-573.7.1.el6.x86_64 ([email protected]) (g...
  • 系統安裝安裝準備系統:CentOS 7、Win 10硬體:U盤一枚、PC一臺軟體:UltraISO安裝步驟使用UltraISO將鏡像寫入U盤window10使用磁碟管理,空出一個未分配的區域留給centos安裝系統,一般20G以上重起電腦,bios中修改啟動項至usb啟動出現三個選擇項,使用向上箭頭...
  • 第1章 Crond是什麼?Crond是linux系統用來定期執行命令或指定程式任務的一種服務或軟體。一般情況下,我們安裝完Centos5/6linux操作系統之後,預設便會啟動Crond任務調度服務。Crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作。如果有,便會根據其預先設...
  • 安裝環境:Vmware 11、SUSE11 64位vmware快速安裝linux虛擬機的過程還是比較簡單的,步驟如下:1、點擊文件,新建虛擬機。2、選擇典型安裝。3、在紅框中選擇想要安裝的虛擬機鏡像,vmware會自動檢測系統版本。4、填寫虛擬機信息,創建用戶,註意此處密碼需要牢記,用於該處創建的用...
  • 上一篇,用 GPIO 直接供電給 LED,用高低電平作開關,不靠譜。GPIO 是信號用的,不是當電源用的。而且,一個 GPIO 只能給可憐的 5mA 左右,取多了會燒(我沒燒過不知道是不是真的會燒,但說明書上面是這樣寫)。這樣玩不過來,所以我做了以下三極體實驗。 2N3904 參數請點擊這裡。不推薦...
  • Linux下 Apache的配置文件是 /etc/apache2/apache2.conf,Apache在啟動時會自動讀取這個文件的配置信息。而其他的一些配置文件,如 httpd.conf等,則是通過Include指令包含進來。
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...