2014-07-18 8 views
0

http://msftdbprodsamples.codeplex.com/releases/view/55330에서 AdventureWorks2012 DB를 가져 와서 Person.Password 테이블에서 ValidatePassword를 찾으려고했습니다. 'PasswordHash'열 설명에 "전자 메일 계정의 암호"가 표시됩니다. 및 'PasswordSalt'열 설명에 "암호가 해시되기 전에 암호 문자열과 연결된 임의의 값"이 표시됩니다.AdventureWorks2012 DB - 암호 저장 방법 및 암호 유효성 검사 방법

BusinessEntityID, PasswordHash, PasswordSalt, EmailAddress 
---------------- -------------------------------------------------------------------------- 
1, pbFwXWE99vobT6g+vPWFy93NtUU/orrIWafF01hccfM=, bE3XiWw=, [email protected] 

2, bawRVNrZQYQ05qF05Gz6VLilnviZmrqBReTTAGAudm0=, "EjJaC3U=, [email protected] 

가 어떻게이 PasswordHash를 만드는 데 사용되는 해시 알고리즘을 알고 :

다음은 DB에서 샘플 데이터는? 그리고 passwordsalt가 어떻게 생성 되었습니까?

암호 유효성을 검사하는 코드 시도가 있지만 해시 알고리즘이 작동하지 않습니다. 누구든지 이것에 대해 약간의 빛을 비춰 줄 수 있습니까?

public class SecurityService : ISecurityService 
    { 
     public string UserName { get; set; } 

     public bool ValidateCredentials(string password, Password dbPassword) 
     { 
      bool valid = false; 

      byte[] saltBytes = Convert.FromBase64String(dbPassword.PasswordSalt); //dbPassword.PasswordSalt: bE3XiWw= 
      byte[] passwordBytes = Encoding.Unicode.GetBytes(password); //password: [email protected] 
      byte[] passwordHashBytes = Convert.FromBase64String(dbPassword.PasswordHash);//dbPassword.PasswordHash: pbFwXWE99vobT6g+vPWFy93NtUU/orrIWafF01hccfM= 
      byte[] passwordHashed = Hash(passwordBytes, saltBytes); 
      byte[] dbPasswordHashed = Hash(passwordHashBytes, saltBytes); 

      valid = dbPasswordHashed.SequenceEqual(passwordHashed); 

      return valid; 

     } 

     private static byte[] Hash(byte[] value, byte[] salt) 
     { 
      byte[] saltedValue = value.Concat(salt).ToArray(); 
      return HashAlgorithm.Create("MD5").ComputeHash(saltedValue); 
      //return HashAlgorithm.Create("SHA1").ComputeHash(saltedValue); 
      //return HashAlgorithm.Create("SHA256").ComputeHash(saltedValue); 
      //return HashAlgorithm.Create("SHA384").ComputeHash(saltedValue); 
      //return HashAlgorithm.Create("SHA512").ComputeHash(saltedValue); 
     } 
    } 
+0

이 예제에서 전자 메일 주소 열의 암호와 값이 같습니까? –

+0

예, 암호 해시 열에 대한 설명입니다. – user3851226

답변

0

바꿀 경우 = dbPasswordHashed.SequenceEqual (passwordHashed); with valid = passwordHashBytes.SequenceEqual (passwordHashed);

올바른 결과를 얻을 수 있습니다.