这是我的问题:
失败的原因是因为用户以明文形式输入密码,但该函数正在将其与散列值进行比较,这显然会出错。
如何在访问电子表格时对输入的Excel密码进行哈希处理,以便将其与注册表中存储的哈希值进行比较?
任何解决此问题的想法也将受到赞赏。
我正在使用Excel Interop在C#中编写这个...
...谢谢
木质
答案 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。 (是的,它在错误的命名空间中是一个愚蠢的方法名称!)。