본문 바로가기

웹 개발 한걸음

단방향 암호 SH3 를 사용한 Password 암호화

 

1. 로그인 패스워드가 db에 그대로 저장되어선 안된다고 판단. 

 

2. 암호화에 대한 구글링

 

3. 패스워드는 관리자가 다시 복호화할 수 없는 단방향 암호화가 적절하다.

 

 

4. sh3를 사용하기 위해 pom.xml에 추가

1
2
3
4
5
6
  <!-- 단방향 암호화 sh3-->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.59</version>
        </dependency>
cs

 5. CryptoUtil.java 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CryptoUtil {
    
    public static String CryptoSHA3(String key, int hash) {    
    
        DigestKeccak md = new DigestKeccak(hash);
        
        try {
            md.update(key.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        
        byte[] digest = md.digest();
        
        return org.bouncycastle.util.encoders.Hex.toHexString(digest);
    }
}
cs

 

6. 직접 사용해보기 - 회원가입 컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    @RequestMapping("/memreg.inc")
    @ResponseBody
    public Map<StringString> memreg(String m_idx, String m_id, String m_pw, String m_name, String m_gender, 
            String m_status, String m_phone, String r_snscode, String m_level, String question, String answer) throws Exception{
        
        CryptoUtil pass = new CryptoUtil();
        String pw = pass.CryptoSHA3(m_pw, 256);
        
        MemberVO mvo = new MemberVO(m_idx, m_id, pw, m_name, m_gender, m_status, m_phone, r_snscode, m_level, question, answer);
 
        Map<StringString> map = new HashMap<StringString>();
        String chk = "0";
        if(m_dao.join(mvo)) {
            chk = "1";
        } 
        map.put("chk", chk);
 
        return map;
    }
cs

 

7. 암호화된 코드는 꽤 길 수 있어 DB에서 패스워드의 크기는 넉넉하게 해주자  

 

 

8. 회원가입 직접 해보면 패스워드가 암호화된 것을 확인할 수 있다.

 

9. 로그인, 회원정보 수정 등 패스워드를 쓰는 모든 곳에 저렇게 암호화를 걸어주기만 하면 끝. 

 

 

 

 

 

참고 : https://github.com/Jo-GyuHyeon/Spring-MVC-Login/wiki/4.-%EB%8B%A8%EB%B0%A9%ED%96%A5-%EC%95%94%ED%98%B8-SH3-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-Password-%EC%95%94%ED%98%B8%ED%99%94#cryptoutiljava-%EC%83%9D%EC%84%B1