// 1. 일반 로그인 처리
LoginVO resultVO = loginService.actionLogin(loginVO);
/**
* 일반 로그인을 처리한다
* @param vo LoginVO
* @return LoginVO
* @exception Exception
*/
@Override
public LoginVO actionLogin(LoginVO vo) throws Exception {
// 1. 입력한 비밀번호를 암호화한다.
String enpassword = EgovFileScrty.encryptPassword(vo.getPassword(), vo.getId());
vo.setPassword(enpassword);
// 2. 아이디와 암호화된 비밀번호가 DB와 일치하는지 확인한다.
LoginVO loginVO = loginDAO.actionLogin(vo);
// 3. 결과를 리턴한다.
if (loginVO != null && !loginVO.getId().equals("") && !loginVO.getPassword().equals("")) {
return loginVO;
} else {
loginVO = new LoginVO();
}
return loginVO;
}
전자정부 프레임워크에서 일반 로그인은 사용자가 입력한 아이디와 비밀번호를 사용하여 암호화를 거친 후 처리된다.
/**
* 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용)
*
* @param password 암호화될 패스워드
* @param id salt로 사용될 사용자 ID 지정
* @return
* @throws Exception
*/
public static String encryptPassword(String password, String id) throws Exception {
if (password == null) {
return "";
}
byte[] hashValue = null; // 해쉬값
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.reset();
md.update(id.getBytes());
hashValue = md.digest(password.getBytes());
return new String(Base64.encodeBase64(hashValue));
}
EgovFileScrty.java 파일에 암호화 함수가 구현되어있다.
egovframe설명페이지에는 '파일 암호화/복호화 요소기술 클래스'라고 쓰여져 있는데 그 안에 'String encryptPassword(String data) - 비밀번호 암호화(비밀번호 데이터를 복호화 불가한 암호화 처리)' 메소드도 구현되어있다. 왜 위치가 여기에 있는지 이해는 안간다만...
표준프레임워크 공통컴포넌트에서는 실질적인 암호화는 다음 파일에서 이루어 지는게 맞습니다. src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java
전자정부 프레임워크 q&a에서 찾은 바로는 여기가 맞다니까 걍 쓴다... 전정부는 뭔가 그냥 쓴다라는 느낌...
전자정부 프레임워크는 암호화 간소화 서비스도 제공하는데 XML Schema를 통해 필요한 설정만을 추가하여 암호화를 구현할 수 있다.
- context-crypto.xml 생성
egovframework:rte2:fdl:crypto_simplify_v3_8 [eGovFrame]
표준프레임워크 3.8 부터 ARIA 블록암호 알고리즘 기반 암/복호화 설정을 간소화 할 수 있는 방법을 제공한다. 내부적으로 필요한 설정을 가지고 있고, XML Schema를 통해 필요한 설정만을 추가할 수
www.egovframe.go.kr
하지만 암호화 간소화 서비스와 위의 암호화 함수를 혼용해서 쓰면 오류가 날 수 있다.
암호화 로직에 차이는 없지만 알파벳문자열로 치환하는 과정에서 Hex.encodeHexString(~~~)으로 하기때문에 차이가 발생한것으로 예상됩니다
q&a에서 그렇다더라
공통컴포넌트를 참조할때 어떤 방식으로 암호화를 진행할지 고려하고 필요없는 부분은 삭제할 필요가 있다.
[암호화 방식]
주로 Hash 알고리즘(SHA-256,SHA-512)을 사용하여 평문을 암호문으로 암호화하는데 이는 암호문을 평문으로 복호화 불가능하다는 장점이 있다. SHA-512는 SHA-256 보다 보안성이 좋지만 속도,비용,저장용량 측면에서는 효율성이 떨어진다는 단점이 있으므로 개발자의 취향에 따라 선택하여 구현하면 될 것이다.
[sql]
<!-- 일반 로그인 -->
<select id="actionLogin" resultMap="login">
SELECT USR_ID
, USR_NM
, PASSWORD
, EMAIL
, USR_SE
, UNIQ_ID
FROM TBL_USRM
WHERE USR_ID = #{usrId}
AND ENC_USR_PW = #{encUsrPw}
</select>
사용자의 아이디,비밀번호(암호화된 비밀번호로 변환)를 가지고
디비에 존재하는 계정인지를 확인하는 방식으로 로그인기능을 구현하였다.
'공부하는 > etc' 카테고리의 다른 글
트위터v2(free) api 끄적이기 (1) | 2023.07.13 |
---|
댓글