2014-11-18 1 views
1

나는 ASP.NET을 사용하여 웹 사이트를 개발 중이다. 내 사용자에 대한 로그인 인증을 구현하고 싶습니다. 나는 Salt Hash 방법을 사용하여 사용자의 암호를 DB에 안전하게 저장합니다. 다양한 코드를 살펴보면 데이터베이스에 저장할 SALT와 Hashed 암호를 생성하기 위해 아래와 같은 코드를 작성했습니다.해시 된 암호 해싱. 내가 ASP.NET 환경에서 바로하고 있나?

private string hashedPassword; 
    private string Salt; 
    private string SaltPlusPassword; 
    private const byte saltSize = 24; 
    byte[] saltArray; 
    byte[] hashedPasswordArray; 
    byte[] bytes; 

    public void Save_Login(string passWord) 
    { 
     using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) 
     { 
      saltArray = new byte[saltSize]; 
      rng.GetBytes(saltArray); 
     } 
     Salt = Convert.ToBase64String(saltArray); 
     SaltPlusPassword = String.Format("{0}{1}", Salt, passWord); 
     using (SHA256 sha = SHA256.Create()) 
     { 
      bytes = Encoding.UTF8.GetBytes(SaltPlusPassword); 
      hashedPasswordArray = sha.ComputeHash(bytes); 
     } 


     hashedPassword = Convert.ToBase64String(hashedPasswordArray); 
    } 

// DB

//이 hashedPassword가 DB에 저장됩니다 저장 소금이 될 것입니다.

그래서 몇 가지 질문이 있습니다.

1) 기사에서 "당신의 소금이 적어도 해시 기능의 출력만큼 ​​길다"고 읽었습니다. 내 코드에서 선언 된 saltArray, hashedPasswordArray 및 bytes 배열의 크기는 어떻게됩니까? saltArray 크기를 24로 사용했습니다. 괜찮습니까?

2) 사용하면 어떻게됩니까?

bytes = Encoding.Unicode.GetBytes (SaltPlusPassword); 대신

바이트의 Encoding.UTF8.GetBytes = (SaltPlusPassword)의

;

3) 소금과 해쉬 된 암호를 DB에 저장하려면 데이터 형식이 무엇입니까? (My db is MYSQL)

4) SHA256 대신 SHA256Managed를 사용하면 성능 차이가 있습니까? 어느 것이 가장 좋습니까?

5) 마지막으로 올바른 방법으로이 작업을 수행하고 있습니까? 위의 코드에서 약점은 무엇입니까? 당신의 제안은 무엇입니까?

+0

소금 코드를 사용 하시겠습니까? –

+0

아니요. 정적 소금 코드가 아닙니다. RNGCryptoServiceProvider를 사용하여 무작위로 생성합니다. – Sylar

+0

그 다음 데이터베이스에 저장하는 이유는 무엇입니까? –

답변

0

이러한 모든 문제를 다루기보다는 ASP.NET에서 제공하는 기본 제공 ID 관리 도구를 사용하는 것이 좋습니다. 여기

http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

훨씬 더 일반적이고 강력한 참조하십시오.

+1

이것은 어떻게 사용자 암호 보안에 관련이 있습니까? : O – Sylar

+0

사용자의 암호를 보호하기 때문에. 그것을하는 데있어 실질적인 방법입니다. – sonofaforester