如何使用 Visual C# .NET 创建用于窗体身份验证的密钥

本文描述如何创建用于窗体身份验证 cookie 数据的加密、解密和验证的密钥。您可以将本文中创建的密钥用于 Machine.config 文件中的  <system.web>  元素中的 <machineKey> 节的  validationKey  和  decryptionKey  属性。


要求

下面的列表概述了推荐使用的硬件、软件、网络基础结构以及所需的 Service Pack:
  • Microsoft Windows 2000 或 Microsoft Windows XP
  • Microsoft .NET Framework
  • Microsoft Internet 信息服务 (IIS)

创建项目

创建 Visual C# .NET 控制台应用程序:
  1. 启动 Visual Studio .NET。
  2. 文件菜单上,指向新建,然后单击项目
  3. 项目类型下,单击 Visual C# 项目
  4. 模板下,单击“控制台应用程序”。
  5. 将该项目命名为 HashConfigCs
  6. 单击确定

编写用于生成密钥的代码

下面的代码将读取从命令行传入的两个参数:
  • 第一个参数是用于创建 decryptionKey 属性的字节数。
  • 第二个参数是用于创建 validationKey 属性的字节数。
代码使用随机数生成器创建基于命令行参数的随机字节数。在创建随机字节后,这些字节将格式化为适合在 .config 文件中使用的十六进制字符串。

注意 :所创建的十六进制字符串的大小是从命令行传入值的大小的两倍。例如,如果您为密钥指定 24 字节,则转换后相应的字符串长度为 48 字节。 decryptionKey  的有效值为 8 或 24。此属性将为数据加密标准 (DES) 创建一个 16 字节密钥,或者为三重 DES 创建一个 48 字节密钥。 validationKey  的有效值为 20 到 64。此属性将创建长度从 40 到 128 字节的密钥。代码的输出是一个完整的  <machineKey>  元素,您可以将其复制并粘贴到 Machine.config 文件中。

将以下代码添加到 .cs 文件中:
using System;
using System.Text;
using System.Security.Cryptography;

namespace Crypto
{
    public class KeyCreator
    {
        public static void Main(String[] args)
        {			
            String[] commandLineArgs = System.Environment.GetCommandLineArgs();
            string decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs[1]));
            string validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs[2]));

            Console.WriteLine("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", validationKey, decryptionKey);
        }	

        static String CreateKey(int numBytes) 
        {
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            byte[] buff = new byte[numBytes];

            rng.GetBytes(buff);
            return BytesToHexString(buff);
        }

        static String BytesToHexString(byte[] bytes) 
        {
            StringBuilder hexString = new StringBuilder(64);

            for (int counter = 0; counter < bytes.Length; counter++) 
            {
                hexString.Append(String.Format("{0:X2}", bytes[counter]));
            }
            return hexString.ToString();
        }
    }
}
				

生成哈希

现在可编译应用程序。

从命令提示符下运行该应用程序,方法是通过传入两个整数值,它们的大小分别为加密密钥和验证密钥的大小。例如,如果您将控制台应用程序命名为 HashConfigCs.exe,则通过命令行在该应用程序的 Bin\debug 目录下键入以下语法:
hashconfigcs.exe 24 64
您可以预期该应用程序返回类似于以下内容的输出:
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77"
validation="SHA1"/>
					
注意 :由于代码正在使用随机数生成器,所以每次都会生成不同的输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值