你目前正处于脱机状态,正在等待 Internet 重新连接

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

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 313091
为这篇文章的一个 Microsoft Visual C#.net 版本,请参阅 312906

下面的 Microsoft.net 框架类库命名空间引用这篇文章:
  • System.Text
  • System.Security.Cryptography

本任务中

概要
本文介绍如何创建要用于加密、 解密和验证表单身份验证 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 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 文件,然后在 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 配置概述
webfarm 视图状态

属性

文章 ID:313091 - 上次审阅时间:10/29/2007 14:53:07 - 修订版本: 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
反馈