SpringFramework/BASIC

[ MD5 해시코드 ] 비밀번호 암호화 로직 활용

유혁스쿨 2020. 9. 9. 19:39
728x90
반응형

MD5 해시코드 비밀번호 암호화 로직 -> 객체화 클래스 구현 로직

public class PwdChange{
    public static String getPassWordToXEMD5String(String password) { 

        MessageDigest md_Md5 = null;  

        try { 
            md_Md5 = MessageDigest.getInstance("MD5"); 
        } catch (Exception e) { 
            e.printStackTrace();   
        }         

        String resultString; 
        byte[] byteArr; 
        String temp = ""; 
        byteArr = md_Md5.digest(password.getBytes());          

		
        for (int i = 0; i < byteArr.length; i++) {             
            resultString = "" + Integer.toHexString((int)byteArr[i] & 0x000000ff);
            //바이트 배열원소값 + 16진수코드를 연결
            if( resultString.length() < 2 ) {  
                resultString = "0" + resultString; 
            }                 
            temp = temp + resultString; 
        }  
        return temp;   
    }
}

 

 

다른 클래스에서 암호화를 진행할때

PwdChange.getPassWordToXEMD5String(암호화 할 비밀번호);

클래스를 통해 지정된 메서드에 암호값을 넣어 암호화 시켜 줍니다.

 

 

 

로그인 자체는 애초에 회원가입할때 저장되는 암호키와 로그인을 시도할때 입력한 비밀번호를 똑같은 형태로 암호화하
 암호화된 두 값을 비교하여 일치하면 로그인을 성공시켜 줍니다. 

 

 

따라서 회원가입할때 입력받는 비밀번호를 DB에 저장할때 미리 암호화를거쳐 암호화된 비밀번호를 DB에 저장하게되며

    m.setMem_pwd(PwdChange.getPassWordToXEMD5String(m.getMem_pwd()));
    this.memberService.insertMember(m);

회원 가입시의 암호화 과정은 Service단에서 DAO로 완벽히 저장되기 전 중간 사이에서 처리합니다.

 

 

 

로그인할때 입력받을 비밀번호를 다시한번 암호화하여 암호화 된것끼리 비교하여 유효성을 검증합니다

if(!m.getMem_pwd().equals(PwdChange.getPassWordToXEMD5String(login_pwd))) {

로그인 할 때의 유효성검증은 서비스가 아닌 컨트롤러에서 암호화를 해야합니다.

 

 

 

회원을 수정하거나 

m.setMem_pwd(PwdChange.getPassWordToXEMD5String(m.getMem_pwd()));
this.memberService.updateMember(m);
MemberVO db_pwd = this.memberService.getMember(id);//오라클로부터 암호화된 비밀번호 가져오기.
if(!db_pwd.getMem_pwd().equals(del_pwd)) {//m.getMem_pwd() (X) => db_pwd.getMem_pwd() (O)

탈퇴할 때에도 비밀번호가 필요하겠죠

 

 

 

로그인 뿐만아니라, 게시글에서도 마찬가지입니다.

 

게시글을 작성할때 비밀번호를 입력받고 입력받은 비밀번호를 암호화 한 뒤에 DB에 저장해준 후,

해당 게시글을 수정을 한다거나 게시글을 삭제를 할 때에도 똑같이 게시글에 대한 비밀번호를 다시 입력받고 입력받은

BoardVO db_pwd=	this.boardService.getBoardCont(eb.getBoard_no());
//게시물 번호를 기준으로 디비로부터 비밀번호를 가져옴.
if(!db_pwd.getBoard_pwd().equals(eb.getBoard_pwd())) {
//기존 저장되있던 게시물의 비밀번호와 새로 입력한 비밀번호가 같을때

 

 

BoardVO db_pwd=this.boardService.getBoardCont(board_no);
if(!db_pwd.getBoard_pwd().equals(del_pwd)) {

비밀번호를 암호화 한 뒤 DB로부터 암호화되어 저장된 비밀번호와 비교를하여 유효성검증을 실행합니다.

 

 

 

만약 비밀번호를 잊게된다면, 비밀번호를 재발행 해줘야 합니다.

이때에도 난수와 함께 암호화 코드를 사용합니다.

    Random r = new Random();//java.util의 random클래스로 난수를 발생시킨다.
    int pwd_random = r.nextInt(1000000);//0이상 백만이하의 임의의 정수숫자 난수를 발생
    String ran_pwd=Integer.toString(pwd_random);//임시 정수비번을 문자열로 변경 (임시비번 암호화)			
    m.setMem_pwd(PwdChange.getPassWordToXEMD5String(ran_pwd));//임시비번 암호화
    this.memberService.updatePwd(m);//암호화된 임시비번으로 수정		
    fm.addAttribute("ran_pwd",ran_pwd);

 

728x90
반응형