如何创建通过使用 Visual Basic.net 在 Forms 身份验证中使用的键

文章翻译 文章翻译
文章编号: 313091 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍如何创建要用于加密、 解密和验证表单身份验证 cookie 数据的键。您可以使用您创建的 validationKeydecryptionKey 属性 <machinekey>节中的这篇文章中的键,<system.web> 该 Machine.config,并在 Web.config 中的元素的文件。

要求

下面的列表概述了建议的硬件、 软件、 网络的基础结构和服务包,您需要:
  • Microsoft Windows 2000 或 Windows XP
  • microsoft.net 框架
  • Microsoft Internet Information Services (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. 添加到 Visual 基本项目命名 KeyCreator 一个新的类文件。
  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 文件,然后在 Main 子例程中添加以下代码:
        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>部分中的属性 自动生成 选项) 跨网络场,在以下情况中:
  • 当使用 Forms 身份验证。
  • 当在 StateServer 模式下运行会话状态。
  • 当您需要视图状态是跨网络场可用的因为默认情况下 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 .NET 2002 标准版
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 标准版
关键字:?
kbmt kbproductlink kbconfig kbhowtomaster kbsecurity kbstate KB313091 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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