> 백엔드 개발 > C++ > PBKDF2를 사용하여 .NET에서 비밀번호를 안전하게 해시하는 방법은 무엇입니까?

PBKDF2를 사용하여 .NET에서 비밀번호를 안전하게 해시하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-23 12:32:12
원래의
759명이 탐색했습니다.

How to Securely Hash Passwords in .NET Using PBKDF2?

현재 모범 사례를 사용하여 .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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿