반응형

 

요즘 웹사이트에서 회원가입은 필수이다.

이때, 입력받아야 하는 정보는 줄어드는 추세이지만

그래도 아이디/패스워드는 필수로 입력받아야 되는 정보이다.

 

ASP.NET Core Identity에서 PasswordHasher클래스를 제공해준다.

해시(hash)라는 것이 문자열을 더 짧은 길이의 값이나 키로 변화하는 것으로 방대한 내용의 문장도 짧은 몇 개의 문자로 표현이 가능한 것으로 블록체인을 가능하게 만드는 기술을 말한다.

 

 

웹사이트에서 사용자에게 아이디/패스워드를 입력받고

ASP.NET Core Identity에서 해시처리한 후, 해시값을 데이터베이스에 저장한다.

 

 

회원가입한 사용자가 로그인할때 아이디/패스워드를 입력받고

해당 패스워드를 다시 해시처리한다.

그리고 데이터베이스에 저장되어진 해시값과 비교한다. 같으면 로그인 성공, 다르면 로그인 실패.

 

 

PasswordHasher클래스를 사용해서 코드로 구현해보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// PasswordHasher클래스 객체생성
var hash = new PasswordHasher();
 
// 사용자가 입력받은 패스워드
var input = "123456";
 
// 사용자가 입력받은 패스워드를 해시
// input을 해시했을때 아래와 같은 값이 나온다.
// ABs1JurjrKvsQC8wWNZndBbvq+5zmbCvOwDRyQEmrAMnfCQn9VSSR4zIEc/uRtCrcg==
var db = hash.HashPassword(input);
 
// 함수명을 보면 알 수 있듯이
// 해시된 패스워드를 검증하는 함수이다.
// 두 매개변수를 받는다.
// string hashedPassword : 이미 DB에 저장되어 있는 해시 값
// string providedPassword : 해시하지 않은 패스워드 값
var rst = hash.VerifyHashedPassword(db, input);
 
if (rst.Equals(PasswordVerificationResult.Success)) {
    // 성공
else {
    // 실패
}
cs

 

사용자에게 입력받은 패스워드를 HashPassword 함수를 사용하여 해시하고

로그인시 입력받은 패스워드와 데이터베이스에 이미 저장되어 있는 해시값을 VerifyHashedPassword 함수를 사용하여 비교하면 된다.

 

그리고 위에 그림에서 보듯이

PasswordHasher클래스의 HashPassword/PasswordVerificationResult함수가 가상메서드로 되어있기 때문에

PasswordHasher클래스를 상속받어 HashPassword/PasswordVerificationResult함수를 재정의해서 자신만의 암호화방식을 선택해도 좋은 방법인것 같다.

 

반응형

+ Recent posts