Notice
Recent Posts
Recent Comments
Link
Tags
- 트랜잭션#@Transacional#트랜잭션 bean#트랜잭션예제
- json #ajax #정보조회
- spring#maven#스프링#메이븐
- project Package생성
- Spring MVC#Spring 구조 #Spring MVC Model
- 셀레니움 #selenium#셀레니움설치
- mybatis-config.xml
- 동적쿼리if #checkbox검색#checkbox회원검색
- maven#maven환경설정#메이븐환경설정
- bean등록Annotation#annotaion#bean등록#DIAnnotaion
- 동적쿼리 #mybatis동적쿼리
- oracle#DB#데이터베이스 이론
- spring#형상관리#정규표현식#target
- framework #프레임워크 #mybatis
- java면접#IT기술면접
- 스프링트랜잭션
- Today
- Total
HongCat 개발 스토리
7. AOP를 이용한 비밀번호 암호화 본문
1.AOP를 이용한 비밀번호 암호화
2.Hash알고리즘
- 단방향으로 암호화 할 때 사용하는 알고리즘
- compression: 다양한 길이의 데이터를 입력해도 고정길이로 출력함.
- 효율성: 평문에서 암호문으로 변경하는 과정이 빠름
- Collision-free: 메세지가 고유하다면 그에 대한 해시 값도 고유, 공백도 인지
- 해시 알고리즘 종류: MD5(복호화 코드 있어서 안전하지 않음), SHA(SHA-1, SHA-2,(SHA-224, SHA-256, SHA-384, SHA-512 등등)) 보안 강도가 강해짐
EX) 1234 -> aedk 암호화
1234567890 -> dkea 암호화
1-> qeft 암호화
알고리즘의 기본 로직
1234-> aedk (문자형식으로 변환하는 것을 암호화)
aedk-> 1234 (원래대로 되돌림 복호화)
hash 알고리즘(보안에 사용)
1234->aedk 암호화
aedk->1234 복호화를 제공하지 않음
3. 비밀번호 암호화 실습
SHA256Util 클래스 파일과 MemberPass라는 클래스 파일을 만들어준다.
MemberPass.java 소스코드
package org.kh.member.common;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.kh.member.model.vo.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
@Aspect
public class MemberPass {
@Autowired
@Qualifier("SHA256Util")
SHA256Util sha256Util;
// insert 메소드를 포인트컷으로 지정
@Pointcut("execution(* org.kh.member.model.service.MemberService.*Member(org.kh.member.model.vo.Member))")
public void encPass() {
}
@Before("encPass()") //db에 들어가기전에 암호화 처리가 되어야 하므로 before를 이용
public void passwordEnc(JoinPoint jp) throws Exception {
Object[] args= jp.getArgs();
Member m= (Member)args[0];// Member의 주소가 들어감
String password=m.getMemberPw();
System.out.println("암호화 전 PW:"+password);
String encPw=sha256Util.encData(password);
System.out.println("암호화 된 PW:"+encPw);
m.setMemberPw(encPw);
}
}
SHA256Util 소스코드
package org.kh.member.common;
import java.security.MessageDigest;
import org.springframework.stereotype.Component;
@Component("SHA256Util")
public class SHA256Util {
public String encData(String data) throws Exception{// 패스워드 값을 매개변수로 받음
//MessageDigest 클래스를 이용한 암호화
MessageDigest mDigest=MessageDigest.getInstance("SHA-256");
//password 값을 바이트 배열로 바꿔서 mDigest에 넣어줌
mDigest.update(data.getBytes());
//SHA-256으로 변환된 데이터를 byte배열로 꺼냄
byte[] msgStr=mDigest.digest();
//1byte 0~255까지 사용가능하지만
//정수는 음수까지 포함해서 -128~127 까지의 범위를 표현 가능
//16진수로 변경 00~FF 범위로 변경할 예정
StringBuffer sb=new StringBuffer();
for(int i=0;i<msgStr.length;i++) {
byte tmpStrByte=msgStr[i];
String tmpTxt=Integer.toString((tmpStrByte& 0xff)+0x100,16).substring(1);
sb.append(tmpTxt);
}
return sb.toString();
}
}
password가 암호화된 상태로 DB에 저장된 것을 볼 수 있다.
'FrameWork' 카테고리의 다른 글
8. Cron 표현식과 Scheduled 예제 (0) | 2019.12.13 |
---|---|
Mybatis 이클립스 환경 설정 프로젝트 파일 만들기 (0) | 2019.12.12 |
Spring MVC Model 프로젝트 실습 -로그인 (0) | 2019.12.06 |
5.Spring MVC Model (0) | 2019.12.06 |
4. Bean 등록 Annotaion (0) | 2019.12.06 |
Comments