2015-01-31 3 views
0

데이터베이스에 소금에 절인 해시 암호를 저장하는 방법을 찾으려고합니다. 처음으로 그렇게하는 것이므로 프로세스가 어떻게 진행되어야하는지 확신 할 수 없습니다.소금에 절인 해시 암호를 데이터베이스에 저장하는 방법

내 ASP.NET C# 웹 응용 프로그램에서는 먼저 사용자가 계정을 등록해야합니다. 데이터 레이어, 데이터 레이어의 메서드를 호출하는 비즈니스 레이어 및 폼 컨트롤을 표시하는 프레젠테이션 레이어가 있습니다. 지금은 일반 텍스트를 사용하여 데이터베이스에 비밀번호를 저장하고 있습니다. 데이터 레이어에 createAccount() 메서드를 호출 해 보겠습니다. Username, password 및 다른 속성은 createAccount() 메서드에 전달되어 SQL 쿼리를 호출하여 Account 레코드를 만듭니다. 사용자 이름과 암호는 등록 페이지에서 사용자가 지정합니다. 코드 숨김 (.cs) 페이지에서,

 public static string GenerateHashWithSalt(string password, string salt) 
    { 
     // merge password and salt together 
     string sHashWithSalt = password + salt; 
     // convert this merged value to a byte array 
     byte[] saltedHashBytes = Encoding.UTF8.GetBytes(sHashWithSalt); 
     // use hash algorithm to compute the hash 
     System.Security.Cryptography.HashAlgorithm algorithm = new System.Security.Cryptography.SHA256Managed(); 
     // convert merged bytes to a hash as byte array 
     byte[] hash = algorithm.ComputeHash(saltedHashBytes); 
     // return the has as a base 64 encoded string 
     return Convert.ToBase64String(hash); 
    } 

내가 등록 페이지에서,이를 넣어해야하거나,에 : 나는 다음과 같이 해시와 비밀번호를 생성하는 저에게 방법을 제공하는 웹 사이트를 발견 데이터 계층? 그런 다음 어떻게하면 내 다른 특성과 함께이 해시 된 암호를 데이터베이스에 배치했는지 제안 할 수 있습니까? 직접 해시로 저장해야하는지 아니면 먼저 일반 텍스트로 저장해야하며 해시 된 값으로 업데이트해야합니다. 감사!

+2

소금을 일반 텍스트로 저장하고 해시를 바이트 또는 base64로 인코딩 된 텍스트로 저장합니다. 암호를 저장하지 마십시오. –

+1

https://crackstation.net/hashing-security.htm을 참조하십시오. @ AndrewBarber의 의견 외에도 * 서버 *를 해시하고 있는지 확인하십시오. 여기서 논리를 두는 곳은 클라이언트 측에서하지 않는 것이 중요합니다. –

+0

예, 사용자 이름을 소금으로 해시 된 비밀번호로 전달했습니다. 필자는 데이터베이스에 추가 할 데이터 레이어와 로그인 입력의 비밀번호 비교를위한 프리젠 테이션 레이어에 코드를 배치했습니다. 정말 고마워요! – user3763216

답변

관련 문제