inputExcel密码时比较哈希

这是我的问题:

  1. 用户在程序的“选项”部分input密码。
  2. 密码被散列(MD5)并存储在registry中。
  3. 运行该程序,创buildExcel电子表格,并使用存储在registry中的散列值对密码进行保护。
  4. 用户打开电子表格,并提示input密码。
  5. 用户input密码,但无论如何都会失败。

它失败的原因是因为用户以明文input密码,但函数将它与一个散列值进行比较,这显然是错误的。

如何散列在访问电子表格时input的Excel密码,以便将其与registry中存储的散列进行比较?

任何想法解决这个问题也将不胜感激。

我正在使用Excel Interop在C#中编写…

谢谢…

伍迪

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

幸运的是, Excel.Workbooks.Open方法带有一个参数,允许您指定所需的密码。 所以你的代码可以从registry(或从你存储的任何地方)获得哈希密码,然后通过代码打开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); 

我认为这应该做你想要的东西? 让我们知道怎么回事…

麦克风

喜欢这个:

 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(); 

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

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

请参阅FormsAuthentication.HashPasswordForStoringInConfigFile方法 。 (是的,这是一个愚蠢的方法名称在错误的名字空间!)。