2009-08-06 2 views
1

를 입력 할 때 여기 내 문제입니다 :비교 해시 엑셀 암호

  1. 사용자가 프로그램의 옵션 섹션에 암호를 입력.
  2. 암호가 해시 (MD5)되고 레지스트리에 저장됩니다.
  3. 프로그램이 실행되고 Excel 스프레드 시트가 만들어지고 레지스트리에 저장된 해시 된 값을 사용하여 암호로 보호됩니다.
  4. 사용자가 스프레드 시트를 열고 암호를 입력하라는 메시지가 표시됩니다.
  5. 사용자가 암호를 입력하지만 아무리해도 실패합니다.

사용자가 암호를 일반 텍스트로 입력하고 있기 때문에 함수가 해시 된 값과 비교하기 때문에 분명히 오류가 발생합니다.

스프레드 시트에 액세스 할 때 입력 한 Excel 암호를 레지스트리의 저장된 해시와 비교하기 위해 어떻게 해시 할 수 있습니까?

이 문제를 해결하기위한 아이디어가 있으면 알려 주시면 감사하겠습니다. 내가 엑셀 ​​상호 운용성을 사용하여 C#에서이 쓰고 있어요

...

감사합니다 ...

우디 이와 같이

답변

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

을 나는 이것이 당신이 찾고있는 무엇을해야한다고 생각? 어떻게 진행되는지 알려주세요 ...

마이크

+0

나는 그 옵션을 간과했다고 믿을 수 없다. 고마워, 마이크 ... – Woody

+0

문제 없습니다, 우디. C# 3.0에서는 모든 인수를 제공해야하므로 간과하기 쉽습니다. 좋은 소식은 그곳에 있다는 것입니다! :-) –

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

빠른 코멘트를 주셔서 감사합니다. 그러나 나는 당신이 내가 말하는 것을 이해하지 못할 것이라고 생각합니다. 스프레드 시트가 열릴 때 Excel에 입력 된 값을 해시하려고합니다. 나는 어떤 식 으로든 Excel에 연결하지 않고서는 그 일을 할 수있는 방법이 없다는 것을 안다. 그 인증 과정에서 ... 나는 변수를 해쉬하는 법을 알고있다. 엑셀에 입력 된 입력 된 암호를 해쉬하는 문제이다. 대화 상자 ... – Woody

+0

내 잘못입니다. 나는 그것에 대한 답을 모른다. – grenade

0

나는 그렇지 않습니다. 정말 엑셀 상호 운용성이 무엇을 할 수 있는지 알고 있지만, 표준 C#에서/.NET MD5 형식으로 암호를 해시하는 가장 빠른 방법은 사용하는 것입니다 :

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

FormsAuthentication.HashPasswordForStoringInConfigFile Method을 참조하십시오. (네, 잘못된 네임 스페이스의 바보 같은 메소드 이름입니다!).