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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:313091
本文章的有 Microsoft Visual C#.NET] 版本請參閱 312906

本文參照下列 Microsoft.NET Framework 類別庫命名空間:
  • System.Text
  • System.Security.Cryptography

在此工作

結論
本文將告訴您,如何建立用來加密、 解密及驗證表單驗證 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 SystemImports System.TextImports System.Security.CryptographyNamespace 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 ClassEnd 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 組態概觀
webfarm 檢視狀態

警告:本文為自動翻譯

內容

文章識別碼:313091 - 最後檢閱時間:10/29/2007 14:53:07 - 修訂: 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
意見反應