Сравнение хэшей при вводе пароля Excel - PullRequest
1 голос
/ 06 августа 2009

вот моя проблема:

  1. Пользователь вводит пароль в разделе параметров программы.
  2. Пароль хешируется (MD5) и сохраняется в реестре.
  3. Программа запущена, электронная таблица Excel создана и защищена паролем с использованием хешированного значения, которое хранится в реестре.
  4. Пользователь открывает электронную таблицу и получает запрос на ввод пароля.
  5. Пользователь вводит пароль, но он не сработает, несмотря ни на что.

Причина, по которой он не срабатывает, заключается в том, что пользователь вводит пароль в виде открытого текста, но функция сравнивает его с хешированным значением, которое, очевидно, выдает ошибку.

Как я могу хешировать пароль Excel, который вводится при доступе к электронной таблице, чтобы сравнить его с сохраненным хешем в реестре?

Любые идеи по поводу этого также приветствуются.

Я пишу это в C #, используя Excel Interop ...

Спасибо ... * * 1023

Древесный

Ответы [ 3 ]

1 голос
/ 08 августа 2009

Ваша программа должна будет предоставить пароль, потому что пользователь не знает, что это такое!

К счастью, метод 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);

Я думаю, что это должно делать то, что вы ищете? Дайте нам знать, как это происходит ...

Mike

0 голосов
/ 06 августа 2009

Я бы не знал, на что способен совместимость Excel, но в стандартном C # / .NET самый быстрый способ хеширования пароля в формате MD5 - это:

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

См. FormsAuthentication.HashPasswordForStoringInConfigFile Метод . (Да, это неправильное имя метода в неправильном пространстве имен!).

0 голосов
/ 06 августа 2009

Как это:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...