Spring을 통해 로그인 및 회원가입 시스템을 만들때 비밀번호에 대해서 해시(Hash)가 필요하다는 생각을 하였지만 해시(Hash)와 암호화(Encryption) 의 차이점을 정확히 설명할 수 없었다. 이번기회에 정리하는것이 차후에 진행될 프로젝트에도 많은 도움이 될것같아 작성하게 되었다.

 

차이점

Hash는 평문으로 암호화된 문장으로 만들어 주는 기능이다.

Encryption은 평문으로 암호화 된 문장으로 만들어 주는 기능(즉 Hash의 기능) + 암호화 된 문장을 다시 평문으로 만들어 주는 복호화 기능도 가능다.

즉, Hash는 단방향 암호화 기법이고 Encryption은 양뱡향 암호화 기법이다.

 

해시에서 알아야할 중요한 것들 

1. 해시 알고리즘 및 암호화 알고리즘은 다양항 종류가 존재, 알고리즘은 모두에게 공대 되어있다

2. 해시 알고리즘마다 hash길이가 다르고 보안이 뚫린 해시 함수도 존재

3. 해시 알고리즘은 특정 입력에 대해 항상 같은 해시값을 리턴한다

4. 해시된 값은 입력이 다른 값이지만 같을 수 있다.

 

로그인 및 회원가입 시스템에서 나는 Hash SHA 26을 사용하였다. 아래의 코드는 SHA 265에 관한 코드이다.

진행하는 프로젝트에서 설정한 비밀번호가 제대로 Hash되었는지 알아보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
 
import org.springframework.stereotype.Service;
 
import java.security.MessageDigest;
@Service
public class UserPasswordHash {
    public String getSHA256(String plainText) {
        String shaString = "";
        if(plainText == null){
            return "";
        }
        try {
            MessageDigest sh = MessageDigest.getInstance("SHA-256");
            sh.update(plainText.getBytes());
            byte byteData[] = sh.digest();
            StringBuffer stringBuffer = new StringBuffer();
            int byteSize = byteData.length;
 
            for (int i = 0; i < byteSize; i++) {
                stringBuffer.append(Integer.toString((byteData[i] & 0xff+ 0x100 , 16).substring(1));
            }
            shaString = stringBuffer.toString();
        }
 
        catch (Exception e) {
            e.printStackTrace();
            shaString = null;
        }
        return shaString;
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

 

회원가입페이지

위의 그림은 회원가입 페이지이다. 아이디는 :al, 비밀번호는 123으로 설정하였다. 콘솔창에서 hash된 값을 보았다.

회원가입 Service 부분

위의 그림에서 console창에서 비밀번호 123이 SHA 256 알고리즘을 통해 해시된값을 볼수 있다. 이제 저 값이 제대로 해시 되었는지 비교해볼 필요가 있다. http://www.convertstring.com/ko/Hash/SHA256 이곳은 SHA 256알고리즘을 통해 해시된값을 볼 수 있는 사이트이다.

사이트에서 SHA256을 사용하여 변경된 결과값 

위의 콘솔창에서 출력되는 결과값이 작아 보이지 않을수도 있지만 비교하였을때 같은 값이 나오는것을 알수있다. 이를 통해 해시가 제대로 작동하고 있다는 것을 알 수 있다. 로그인 부분또한 이와 마찬가지로 사용자가 입력한 id& password 값을 받아 password는 해시를 통해 데이터베이스에 접근하여 맞는지 비교하고 맞는것이 존재하면 회원로그인 상태로 넘어가면된다.

'SpringBoot' 카테고리의 다른 글

Spring으로 만드는 간단한 게시판(1)  (0) 2019.07.22
Get & Post  (0) 2019.07.08
쿠키(Cookie)와 세션(Session)  (0) 2019.07.08
Docker  (0) 2019.06.27
Spring 시작하기  (0) 2019.06.25

+ Recent posts