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<String, String> 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<String, String> map = new HashMap<String, String>();
String chk = "0";
if(m_dao.join(mvo)) {
chk = "1";
}
map.put("chk", chk);
return map;
}
|
cs |
7. 암호화된 코드는 꽤 길 수 있어 DB에서 패스워드의 크기는 넉넉하게 해주자
8. 회원가입 직접 해보면 패스워드가 암호화된 것을 확인할 수 있다.
9. 로그인, 회원정보 수정 등 패스워드를 쓰는 모든 곳에 저렇게 암호화를 걸어주기만 하면 끝.
'웹 개발 한걸음' 카테고리의 다른 글
[펌] Build, Deploy, WAS란? (0) | 2020.09.23 |
---|---|
[펌] web.xml의 역할 및 간단한 예시 이해하기 (0) | 2020.09.23 |
[암호화] 단방향과 양방향 암호화 (0) | 2020.05.06 |
css에도 조건을 걸 수 있다?! - 미디어 쿼리 (0) | 2020.04.09 |
Spring MVC - AOP? (0) | 2020.04.08 |