현재 모범 사례를 사용하여 .NET에서 비밀번호를 안전하게 해시합니다.
데이터베이스에 비밀번호를 저장할 때 해싱 알고리즘을 사용하여 민감한 정보를 보호하는 것이 중요합니다. 암호화 방법은 이 목적에 적합하지 않습니다. .NET에서 가장 좋은 기본 암호 해싱 알고리즘은 PBKDF2(Password-Based Key Derivation Function 2)입니다.
PBKDF2를 사용한 비밀번호 해싱 단계별 안내
1단계: 소금 값 생성
솔트는 각 비밀번호의 해시를 고유하게 만드는 데 사용되는 임의의 값입니다. 암호화 PRNG(의사 난수 생성기)를 사용하여 솔트 값을 생성합니다.
<code class="language-csharp">byte[] salt; new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);</code>
2단계: PBKDF2 객체 생성 및 해시 값 계산
Rfc2898DeriveBytes
클래스를 인스턴스화하고 비밀번호, 솔트 및 원하는 반복 횟수(최대 100,000회 권장)를 지정합니다.
<code class="language-csharp">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20);</code>
3단계: 저장을 위해 솔트 및 암호화 바이트 결합
솔트와 비밀번호 바이트를 결합하여 데이터베이스 저장을 위한 단일 문자열을 만듭니다.
<code class="language-csharp">byte[] hashBytes = new byte[36]; Array.Copy(salt, 0, hashBytes, 0, 16); Array.Copy(hash, 0, hashBytes, 16, 20);</code>
4단계: Base64 문자열로 변환하여 저장
결합된 바이트를 데이터베이스에 저장하기 위해 Base64 문자열로 인코딩합니다.
<code class="language-csharp">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>
5단계: 사용자가 입력한 비밀번호 확인
사용자가 입력한 비밀번호가 저장된 해시와 일치하는지 확인하려면:
<code class="language-csharp">string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password; byte[] hashBytes = Convert.FromBase64String(savedPasswordHash); byte[] salt = new byte[16]; Array.Copy(hashBytes, 0, salt, 0, 16); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20); for (int i=0; i < 20; i++) if (hashBytes[i+16] != hash[i]) throw new UnauthorizedAccessException();</code>
참고: 반복 횟수는 애플리케이션의 성능 요구 사항에 따라 조정될 수 있습니다. 일반적으로 권장되는 최소값은 10,000입니다.
위 내용은 PBKDF2를 사용하여 .NET에서 비밀번호를 안전하게 해시하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!