如何建立以用於表單驗證使用 Visual Basic.NET 的機碼

文章翻譯 文章翻譯
文章編號: 313091 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何建立用來加密、 解密及驗證表單驗證 Cookie 資料的索引鍵。您可以使用您在 validationKeydecryptionKey 屬性 <machinekey>區段中的本文中所建立的機碼,<system.web> [Machine.config 和 Web.config 元素的檔案。

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Windows 2000 或 Microsoft Windows XP
  • Microsoft.NET 架構
  • Microsoft 網際網路資訊服務 (IIS)

建立專案

  1. 啟動 Microsoft Visual Studio.NET。
  2. 檔案] 功能表上指向 [新增],然後按一下 [專案]。
  3. 在 [專案類型] 區域中,按一下 [Visual Basic 專案]。
  4. 在 [範本] 區域中,按一下 [主控台應用程式]。
  5. 在 [名稱] 文字方塊中輸入 HashConfigVb,],然後再按一下 [確定]]。

撰寫程式碼以雜湊密碼

這一節中的程式碼會讀取兩個命令列從傳遞的引數:
  • 第一個引數是用來建立 decryptionKey 屬性的位元組數目。
  • 第二個引數是用來建立 validationKey 屬性的位元組數目。
程式碼會使用隨機亂數產生器來建立一個隨機根據命令列引數的位元組數。建立隨機位元組之後位元組會格式化成適合使用.config 檔案中的十六進位字串。

附註已建立的十六進位字串是兩次傳遞命令列之值的大小。比方說如果您指定 24 個位元組的索引鍵,產生的字串是 48 位元組的長度後轉換。有效的 decryptionKey 值是 8 或 24。這會建立 16 位元機碼的資料加密標準 (DES) 或 48 位元組鍵的三重 DES 分別。validationKey 的有效值是 20 到 64。這會建立索引鍵從 40 至 128 位元組的長度在轉換之後。從程式碼輸出是整個 <machinekey> 項目,您可以複製並貼入一個 Machine.config 或 Web.config 檔。

  1. 新增一個名為 KeyCreator 至 Visual 基本專案的類別檔案。
  2. Replace the existing code in the KeyCreator.vb file with the following code:
    Imports System
    Imports System.Text
    Imports System.Security.Cryptography
    
    Namespace Crypto
      Public Class KeyCreator
    	
        Public Shared Sub CreateMachineKey()
          Dim commandLineArgs As String()
          commandLineArgs = System.Environment.GetCommandLineArgs()
    
          Dim decryptionKey As String
          decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs(1)))
          Dim validationKey As String
          validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs(2)))
    
          Console.WriteLine("<machineKey validationKey=""{0}"" decryptionKey=""{1}"" validation=""SHA1""/>", _
          validationKey, decryptionKey)
         End Sub
    
         Public Shared Function CreateKey(numBytes As Integer) As String
           Dim rng As RNGCryptoServiceProvider = New RNGCryptoServiceProvider()
           Dim buff(numBytes -1) As Byte
    
           rng.GetBytes(buff)
    				
           Return BytesToHexString(buff)
         End Function
     
         Public Shared Function BytesToHexString(bytes As Byte()) As String
           Dim hexString As StringBuilder = New StringBuilder(64)
           Dim counter as Integer
    
           For counter = 0 To bytes.Length - 1
             hexString.Append(String.Format("{0:X2}", bytes(counter)))
           Next
    
           Return hexString.ToString()
        End Function
    
      End Class
    End Namespace
    					
  3. 開啟建立的預設值,Module1.vb 檔案,然後在 主要 子常式中加入下列程式碼:
        Dim MyKeyCreator As New Crypto.KeyCreator()
        MyKeyCreator.CreateMachineKey()
    					
  4. 建置應用程式。

產生之雜湊

從命令提示字元中執行應用程式,然後將會解密和驗證金鑰的大小的兩個整數值中。如果您命名主控台應用程式 HashConfigVb.exe,在資源回收筒的命令提示字元下輸入下列語法應用程式的目錄:
HashConfigVb.exe 24 64
應用程式應該會傳回類似下列的輸出的輸出:
<machineKey validationKey="08CE6B478DCE73..........E566D8AC5D1C045BA60"
            decryptionKey="4252D6B2268.........67F451CE65D0F2ABE9BCD3A"
            validation="SHA1"/>
					
附註因為程式碼會使用隨機亂數產生器,輸出是不同每一次。

更新組態檔

  1. 找不到 [Machine.config 或 Web.config 檔。
  2. 在組態檔中,找出 <system.web> 區段。
  3. 從主控台應用程式輸出取代 <machinekey>區段。如果 <machinekey>區段不存在,建立它。
  4. 儲存組態檔。
  5. 在 Machine.config 變更才會影響 Web 伺服陣列中的所有伺服器上,重新啟動 IIS。

疑難排解

請確定 <machinekey>區段具有完全相同、 明確的機碼 (也就是不要使用自動產生 選項 <machinekey>區段中的屬性) 跨 Web 伺服陣列,在下列情況中:
  • 當您使用表單驗證。
  • 當您在 StateServer 模式中執行工作階段狀態。
  • 當您想 ViewState 能夠跨 Web 伺服陣列使用,因為 enableViewStateMAC 屬性依預設,設定為 True

?考

如需詳細資訊按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中發行項]:
308157如何使用 Visual Basic.NET,ASP.NET 應用程式中實作表單型驗證
306238如何使用 Visual Basic.NET,ASP.NET 應用程式中實作角色架構安全性與表單基礎的驗證
306590資訊: ASP.NET 安全性概觀
307626資訊: ASP.NET 組態概觀

屬性

文章編號: 313091 - 上次校閱: 2007年10月29日 - 版次: 3.10
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
關鍵字:?
kbmt kbproductlink kbconfig kbhowtomaster kbsecurity kbstate KB313091 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:313091
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com