본문 바로가기
공부하는/etc

[전자정부 프레임워크] 로그인 암호화처리

by fromkong 2021. 5. 11.
// 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

댓글