일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- CRUD
- group by
- HTML
- JavaScript
- Java
- alias
- 한글 인코딩
- jQuery
- 답변형 게시판
- rownum
- distinct
- sql developer
- 과정평가형
- github
- HTTP Status 404
- Oracle DB
- SQL
- 부트스트랩
- 성적프로그램
- git
- JSP
- Bootstrap
- 이클립스
- Oracle SQL
- HTTP Status 500
- tomcat
- 제약조건
- ||
- 모조칼럼
- oracle
Archives
초급의 끄적거림
[Base64] base64 암호화 복호화 본문
0. Base64란?
- 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식
1. Base64 동작방식
-
base64는 8bit의 데이터를 6bit의 크기로 표현 - 24bit를 단위로 하여 3개의 문자에서 4개의 문자를 얻게 됨
- 6bit의 2진수는 아래의 base64 table을 이용하여 문자로 바꿔줌
- 만약 인코딩할 문자가 3개 (24bit) 단위가 아닐 때
: 위의 결과를 보면 a 라는 문자 하나를 넣었을 때 'YQ=='로 base64 table에는 없는 '=' 문자가 추가됨
: '='은 bit 수를 맞춰주기 위해서 0으로 채워주는 패딩이라는 것
2. 공통으로 쓰기 위해서 만듦.
- 비밀번호와 쿠폰 번호의 암호화를 위함
- 비밀번호를 암호화하여 insert 했다가 그것을 다시 되돌리려는 (복호화) 작업
3. 염두할 것
(직접 다 써놓고 생각할 것 - 주석으로 남길 경우, 최종까지 주석을 삭제하지 말 것)
- 인코딩, 디코딩 하려는 값의 여부 확인하기 (만약 값이 없을 수도 있는데 실행이 될 수 있기 때문에 사전차단)
- getByte를 인코딩
- 리턴 값이 필요한가? 어떤 타입으로 리턴을 해야하는가? (리턴의 경우, 로직 실행 후 나온 값을 실행한 사람에게 되돌려줘서 보여줘야하는지 아닌지를 생각해 볼 것)
- 어떤 결과를 원하는가
- 공통 마다 다르긴하지만 무작정 throw를 써서 던져버리면 쓰던 사람이 오류가 나면 그게 왜 던져졌는지 알지 못하는 경우가 있기 때문에 throw 말고 try~catch 사용함
//인코딩 (암호화)
public String getEncoder(String data) {
byte[] encoded = null;
Encoder encoder =null;
try {
//data == null 이라고 쓰는 것보다 isblank로 빈 칸 처리
if(StringUtils.isBlank(data)) {
//TODO CreteriaInf올라오면 나중에 리턴값 수정해줘야함 (일단은 ""로 리턴)
return "";
//return CreteriaInfo.FAIL;
}
//바이트 변환
encoded = data.getBytes();
//인코딩
encoder = Base64.getEncoder();
//encoder.encode(encoded);
}catch(Exception e){
logger.debug("인코딩 오류가 발생하였습니다",e.getMessage());
e.getStackTrace();
}
//인코딩한 문자열 return
return new String(encoder.encode(encoded));
}
//디코딩 구현
//E 리턴 필요한가? 어떠한 타입으로 리턴해야하는가
public String getDecode(String data) {
byte[] decoded = null;
Decoder decoder = null;
try {
if(StringUtils.isBlank(data)) {
return "";
//TODO CreteriaInf올라오면 나중에 리턴값 수정해줘야함
//return CreteriaInfo.FAIL;
}
decoded = data.getBytes();
decoder = Base64.getDecoder();
//decoder.decode(decoded);
}catch(Exception e) {
logger.debug("디코딩 오류가 발생하였습니다",e.getMessage());
e.getStackTrace();
}
//디코딩한 문자열 return
return new String(decoder.decode(decoded));
}
'JAVA' 카테고리의 다른 글
[Eclipse] 이클립스 SVN 명령과 Ignore Pattern (0) | 2020.01.10 |
---|---|
[Spring] 어노테이션 (0) | 2019.11.30 |
[Ecilpse 오류] save could not be completed (0) | 2019.11.25 |
[JAVA] 반복문 (While / For문) / 배열 Array (0) | 2019.10.11 |
[JAVA] 임시 비밀번호 생성 소스 (0) | 2019.09.25 |
Comments