데이터베이스에 소금에 절인 해시 암호를 저장하는 방법을 찾으려고합니다. 처음으로 그렇게하는 것이므로 프로세스가 어떻게 진행되어야하는지 확신 할 수 없습니다.소금에 절인 해시 암호를 데이터베이스에 저장하는 방법
내 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);
}
내가 등록 페이지에서,이를 넣어해야하거나,에 : 나는 다음과 같이 해시와 비밀번호를 생성하는 저에게 방법을 제공하는 웹 사이트를 발견 데이터 계층? 그런 다음 어떻게하면 내 다른 특성과 함께이 해시 된 암호를 데이터베이스에 배치했는지 제안 할 수 있습니까? 직접 해시로 저장해야하는지 아니면 먼저 일반 텍스트로 저장해야하며 해시 된 값으로 업데이트해야합니다. 감사!
소금을 일반 텍스트로 저장하고 해시를 바이트 또는 base64로 인코딩 된 텍스트로 저장합니다. 암호를 저장하지 마십시오. –
https://crackstation.net/hashing-security.htm을 참조하십시오. @ AndrewBarber의 의견 외에도 * 서버 *를 해시하고 있는지 확인하십시오. 여기서 논리를 두는 곳은 클라이언트 측에서하지 않는 것이 중요합니다. –
예, 사용자 이름을 소금으로 해시 된 비밀번호로 전달했습니다. 필자는 데이터베이스에 추가 할 데이터 레이어와 로그인 입력의 비밀번호 비교를위한 프리젠 테이션 레이어에 코드를 배치했습니다. 정말 고마워요! – user3763216