Dreamine.Identity 1.0.0.0
Dreamine.Identity 프로젝트의 API와 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.Identity.DreaminePasswordHasher 클래스 참조

더 자세히 ...

정적 Public 멤버 함수

static string HashPassword (string password)
static PasswordHashVerificationResult VerifyPassword (string password, string storedHash, out string? upgradedHash)
static bool VerifyPassword (string password, string storedHash)
static string HashPlainTextForStorage (string passwordOrHash)
static bool IsDreamineHash (string value)

정적 Private 멤버 함수

static bool VerifyPbkdf2 (string password, string storedHash, out bool needsRehash)
static bool VerifyLegacySha256 (string password, string storedHash)
static bool IsLegacySha256Hash (string storedHash)
static bool FixedTimeEquals (string left, string right)

정적 Private 속성

const string Version = "v1"
const int SaltSize = 16
const int HashSize = 32
const int CurrentIterations = 600_000

상세한 설명

Dreamine 계열 서비스가 공통으로 사용하는 버전 지정 PBKDF2 비밀번호 해시 기능을 제공합니다.

DreaminePasswordHasher.cs 파일의 14 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ FixedTimeEquals()

bool Dreamine.Identity.DreaminePasswordHasher.FixedTimeEquals ( string left,
string right )
inlinestaticprivate

UTF-8 문자열을 길이 노출을 최소화하는 고정 시간 비교로 검사합니다.

매개변수
left첫 번째 값입니다.
right두 번째 값입니다.
반환값
값이 같으면 true입니다.

DreaminePasswordHasher.cs 파일의 470 번째 라인에서 정의되었습니다.

471 {
472 var leftBytes = Encoding.UTF8.GetBytes(left);
473 var rightBytes = Encoding.UTF8.GetBytes(right);
474 return leftBytes.Length == rightBytes.Length &&
475 CryptographicOperations.FixedTimeEquals(leftBytes, rightBytes);
476 }

다음에 의해서 참조됨 : VerifyLegacySha256(), VerifyPassword().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HashPassword()

string Dreamine.Identity.DreaminePasswordHasher.HashPassword ( string password)
inlinestatic

임의 솔트와 현재 반복 횟수를 사용하여 비밀번호를 PBKDF2-SHA256 형식으로 해시합니다.

매개변수
password해시할 평문 비밀번호입니다.
반환값
버전, 반복 횟수, 솔트 및 해시를 포함한 저장 문자열입니다.
예외
ArgumentNullExceptionpasswordnull인 경우 발생합니다.
ArgumentExceptionpassword 가 비어 있거나 공백인 경우 발생합니다.

DreaminePasswordHasher.cs 파일의 93 번째 라인에서 정의되었습니다.

94 {
95 ArgumentException.ThrowIfNullOrWhiteSpace(password);
96
97 var salt = RandomNumberGenerator.GetBytes(SaltSize);
98 var hash = Rfc2898DeriveBytes.Pbkdf2(
99 password,
100 salt,
101 CurrentIterations,
102 HashAlgorithmName.SHA256,
103 HashSize);
104
105 return string.Join(
106 '.',
107 Version,
108 CurrentIterations.ToString(System.Globalization.CultureInfo.InvariantCulture),
109 Convert.ToBase64String(salt),
110 Convert.ToBase64String(hash));
111 }

다음을 참조함 : CurrentIterations, HashSize, SaltSize, Version.

다음에 의해서 참조됨 : Dreamine.Identity.SqliteUserStore.ChangeLocalPasswordAsync(), Dreamine.Identity.SqliteUserStore.CreateLocalAsync(), HashPlainTextForStorage(), VerifyPassword().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HashPlainTextForStorage()

string Dreamine.Identity.DreaminePasswordHasher.HashPlainTextForStorage ( string passwordOrHash)
inlinestatic

입력이 이미 지원되는 해시가 아니면 저장용 PBKDF2 해시로 변환합니다.

매개변수
passwordOrHash평문 비밀번호 또는 기존 해시입니다.
반환값
그대로 유지한 기존 해시 또는 새 PBKDF2 해시입니다.

DreaminePasswordHasher.cs 파일의 245 번째 라인에서 정의되었습니다.

246 {
247 if (string.IsNullOrWhiteSpace(passwordOrHash) ||
248 IsDreamineHash(passwordOrHash) ||
249 IsLegacySha256Hash(passwordOrHash))
250 {
251 return passwordOrHash;
252 }
253
254 return HashPassword(passwordOrHash);
255 }

다음을 참조함 : HashPassword(), IsDreamineHash(), IsLegacySha256Hash().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ IsDreamineHash()

bool Dreamine.Identity.DreaminePasswordHasher.IsDreamineHash ( string value)
inlinestatic

값이 현재 Dreamine 버전 지정 해시 접두사로 시작하는지 확인합니다.

매개변수
value검사할 값입니다.
반환값
Dreamine 해시 형식이면 true입니다.

DreaminePasswordHasher.cs 파일의 281 번째 라인에서 정의되었습니다.

281 =>
282 value.StartsWith($"{Version}.", StringComparison.Ordinal);

다음에 의해서 참조됨 : HashPlainTextForStorage().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ IsLegacySha256Hash()

bool Dreamine.Identity.DreaminePasswordHasher.IsLegacySha256Hash ( string storedHash)
inlinestaticprivate

값이 64자 SHA-256 16진수 형식인지 확인합니다.

매개변수
storedHash검사할 값입니다.
반환값
레거시 형식이면 true입니다.

DreaminePasswordHasher.cs 파일의 435 번째 라인에서 정의되었습니다.

435 =>
436 storedHash.Length == 64 && storedHash.All(Uri.IsHexDigit);

다음에 의해서 참조됨 : HashPlainTextForStorage(), VerifyLegacySha256().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ VerifyLegacySha256()

bool Dreamine.Identity.DreaminePasswordHasher.VerifyLegacySha256 ( string password,
string storedHash )
inlinestaticprivate

비밀번호를 레거시 소문자 SHA-256 16진수 해시와 비교합니다.

매개변수
password평문 비밀번호입니다.
storedHash저장된 레거시 해시입니다.
반환값
일치하면 true입니다.

DreaminePasswordHasher.cs 파일의 400 번째 라인에서 정의되었습니다.

401 {
402 if (!IsLegacySha256Hash(storedHash))
403 {
404 return false;
405 }
406
407 var actual = Convert.ToHexString(SHA256.HashData(Encoding.UTF8.GetBytes(password))).ToLowerInvariant();
408 return FixedTimeEquals(actual, storedHash.ToLowerInvariant());
409 }

다음을 참조함 : FixedTimeEquals(), IsLegacySha256Hash().

다음에 의해서 참조됨 : VerifyPassword().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ VerifyPassword() [1/2]

bool Dreamine.Identity.DreaminePasswordHasher.VerifyPassword ( string password,
string storedHash )
inlinestatic

비밀번호가 저장된 값과 일치하는지 확인합니다.

매개변수
password검증할 평문 비밀번호입니다.
storedHash저장된 해시 또는 레거시 값입니다.
반환값
일치하면 true, 그렇지 않으면 false입니다.

DreaminePasswordHasher.cs 파일의 218 번째 라인에서 정의되었습니다.

218 =>
219 VerifyPassword(password, storedHash, out _) is not PasswordHashVerificationResult.Failed;

◆ VerifyPassword() [2/2]

PasswordHashVerificationResult Dreamine.Identity.DreaminePasswordHasher.VerifyPassword ( string password,
string storedHash,
out string? upgradedHash )
inlinestatic

PBKDF2, 레거시 SHA-256 또는 이전 평문 저장값과 비밀번호를 비교하고 필요하면 새 해시를 제공합니다.

매개변수
password검증할 평문 비밀번호입니다.
storedHash저장된 해시 또는 레거시 값입니다.
upgradedHash재해시가 필요하면 새 PBKDF2 해시를 받습니다.
반환값
실패, 성공 또는 재해시 필요 상태입니다.

DreaminePasswordHasher.cs 파일의 153 번째 라인에서 정의되었습니다.

157 {
158 upgradedHash = null;
159
160 if (string.IsNullOrEmpty(password) || string.IsNullOrWhiteSpace(storedHash))
161 {
162 return PasswordHashVerificationResult.Failed;
163 }
164
165 var pbkdf2Result = VerifyPbkdf2(password, storedHash, out var needsRehash);
166 if (pbkdf2Result)
167 {
168 if (needsRehash)
169 {
170 upgradedHash = HashPassword(password);
171 return PasswordHashVerificationResult.SuccessRehashNeeded;
172 }
173
174 return PasswordHashVerificationResult.Success;
175 }
176
177 if (VerifyLegacySha256(password, storedHash) || FixedTimeEquals(password, storedHash))
178 {
179 upgradedHash = HashPassword(password);
180 return PasswordHashVerificationResult.SuccessRehashNeeded;
181 }
182
183 return PasswordHashVerificationResult.Failed;
184 }

다음을 참조함 : FixedTimeEquals(), HashPassword(), VerifyLegacySha256(), VerifyPbkdf2().

다음에 의해서 참조됨 : Dreamine.Identity.SqliteUserStore.ChangeLocalPasswordAsync(), Dreamine.Identity.SqliteUserStore.ValidateLocalAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ VerifyPbkdf2()

bool Dreamine.Identity.DreaminePasswordHasher.VerifyPbkdf2 ( string password,
string storedHash,
out bool needsRehash )
inlinestaticprivate

버전 지정 PBKDF2 저장 문자열을 구문 분석하고 고정 시간으로 검증합니다.

매개변수
password평문 비밀번호입니다.
storedHash저장된 PBKDF2 문자열입니다.
needsRehash검증 성공 후 반복 횟수 업그레이드가 필요한지 받습니다.
반환값
해시가 일치하면 true입니다.

DreaminePasswordHasher.cs 파일의 324 번째 라인에서 정의되었습니다.

325 {
326 needsRehash = false;
327
328 var parts = storedHash.Split('.');
329 if (parts.Length != 4 || parts[0] != Version)
330 {
331 return false;
332 }
333
334 if (!int.TryParse(
335 parts[1],
336 System.Globalization.NumberStyles.None,
337 System.Globalization.CultureInfo.InvariantCulture,
338 out var iterations))
339 {
340 return false;
341 }
342
343 try
344 {
345 var salt = Convert.FromBase64String(parts[2]);
346 var expected = Convert.FromBase64String(parts[3]);
347 var actual = Rfc2898DeriveBytes.Pbkdf2(
348 password,
349 salt,
350 iterations,
351 HashAlgorithmName.SHA256,
352 expected.Length);
353
354 var verified = CryptographicOperations.FixedTimeEquals(actual, expected);
355 needsRehash = verified && iterations < CurrentIterations;
356 return verified;
357 }
358 catch (FormatException)
359 {
360 return false;
361 }
362 catch (ArgumentException)
363 {
364 return false;
365 }
366 }

다음을 참조함 : CurrentIterations, Version.

다음에 의해서 참조됨 : VerifyPassword().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ CurrentIterations

const int Dreamine.Identity.DreaminePasswordHasher.CurrentIterations = 600_000
staticprivate

Current Iterations 값을 보관합니다.

DreaminePasswordHasher.cs 파일의 51 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : HashPassword(), VerifyPbkdf2().

◆ HashSize

const int Dreamine.Identity.DreaminePasswordHasher.HashSize = 32
staticprivate

Hash Size 값을 보관합니다.

DreaminePasswordHasher.cs 파일의 42 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : HashPassword().

◆ SaltSize

const int Dreamine.Identity.DreaminePasswordHasher.SaltSize = 16
staticprivate

Salt Size 값을 보관합니다.

DreaminePasswordHasher.cs 파일의 33 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : HashPassword().

◆ Version

const string Dreamine.Identity.DreaminePasswordHasher.Version = "v1"
staticprivate

Version 값을 보관합니다.

DreaminePasswordHasher.cs 파일의 24 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : HashPassword(), VerifyPbkdf2().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: