输入Excel密码时比较哈希值

时间:2009-08-06 19:24:31

标签: c# excel hash passwords

这是我的问题:

  1. 用户在程序的“选项”部分输入密码。
  2. 密码经过哈希处理(MD5)并存储在注册表中。
  3. 运行程序,创建Excel电子表格,并使用存储在注册表中的散列值保护密码。
  4. 用户打开电子表格,系统会提示您输入密码。
  5. 用户输入密码,但无论如何都会失败。
  6. 失败的原因是因为用户以明文形式输入密码,但该函数正在将其与散列值进行比较,这显然会出错。

    如何在访问电子表格时对输入的Excel密码进行哈希处理,以便将其与注册表中存储的哈希值进行比较?

    任何解决此问题的想法也将受到赞赏。

    我正在使用Excel Interop在C#中编写这个...

    ...谢谢

    木质

3 个答案:

答案 0 :(得分:1)

您的程序必须提供密码,因为用户不知道它是什么!

幸运的是,Excel.Workbooks.Open方法接受一个参数,允许您指定所需的密码。因此,您的代码可以从注册表(或从您存储它的任何地方)获取哈希密码,然后通过代码打开wokrbook:

string fileName = @"C:\...";
string password = GetHashedPasswordFromRegistry();

Excel.Workbook workbook = excelApp.Workbooks.Open( 
    fileName, Type.Missing, Type.Missing,Type.Missing,
    password, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing);

我认为这应该做你想要的?让我们知道它是怎么回事......

麦克

答案 1 :(得分:0)

像这样:

using System;
using System.Security.Cryptography;
using System.Text;

public static class Helpers
{
    public static Guid GetHash(string password)
    {
        return new Guid(new MD5CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes(password.Trim())));
    }
}

用法:

string hash = Helpers.GetHash("password").ToString();

答案 2 :(得分:0)

我真的不知道Excel互操作可以做什么,但在标准的C#/ .NET中,使用MD5格式散列密码的最快方法是:

string hashedPassword = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("password", "MD5")

FormsAuthentication.HashPasswordForStoringInConfigFile Method。 (是的,它在错误的命名空间中是一个愚蠢的方法名称!)。