본문 바로가기
개발일지/기타

[JAVA/JQuery/JS] 중요 정보 암호화 하여 전송하기/복호화하여 저장하기

by 쫌눈 2022. 4. 28.
반응형

중요정보가 평문으로 전송이 된다면?

  • 사용자 계정 유출 위험
  • 카드 정보 유출 위험
  • 결제 정보 유출 위험

등이 있다.

위와같이 내 소중한 정보가 남에게 유출당해 알 수 있는것을 사용자는 원치 않는다.

그런 웹페이지를 만들어서도 안된다.

그러므로 중요정보는 암호화하여 전송해, 그 사용자가 알 수 없게 해야한다.

아래는 내가 사용한 방법이다.

암호화/복호화의 방법은 많을테니 꼭 이 코드를 사용하지 않아도 된다.

Front Code

$.loginSubmit = function(){
	let id = $("#user_id").val();
	let pwd = $("#password").val();

	if(id == null ) {
		alert('ID 를 입력하세요');
		return;
	} else if(id.length < 1) {
		alert('ID 를 입력하세요');
		return;
	}

	if(pwd == null) {
		alert("비밀번호를 입력하세요");
		return;
	} else if(pwd.length < 1) {
		alert('비밀번호를 입력하세요');
		return;
	}

	//id, pwd 암호화
	id = EncryptEncode(id);
	pwd = EncryptEncode(pwd);

	$('<input type="hidden" name="user_id"/>').val(id).appendTo('#login');
	$('<input type="hidden" name="password"/>').val(pwd).appendTo('#login');

	$("form[name=login]").submit();
}

function EncryptEncode(str){
    str = Encrypt(str);
    str = encodeURL(str);

    return str;
}

//암호화
function Encrypt(theText) {
    output = new String;
    Temp = new Array();
    Temp2 = new Array();
    TextSize = theText.length;

    for (i = 0; i < TextSize; i++) {
        rnd = Math.round(Math.random() * 122) + 68;
        Temp[i] = theText.charCodeAt(i) + rnd;
        Temp2[i] = rnd;
    }

    for (i = 0; i < TextSize; i++) {
        output += String.fromCharCode(Temp[i], Temp2[i]);
    }

    return output;
}

//Url 인코딩
function encodeURL(str){
    var s0, i, s, u;
    s0 = "";
    for (i = 0; i < str.length; i++){
        s = str.charAt(i);
        u = str.charCodeAt(i);
        if (s == " "){s0 += "+";}
        else {
            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){
                s0 = s0 + s;
            }
            else {
                if ((u >= 0x0) && (u <= 0x7f)){
                    s = "0"+u.toString(16);
                    s0 += "%"+ s.substr(s.length-2);
                }
                else if (u > 0x1fffff){
                    s0 += "%" + (0xf0 + ((u & 0x1c0000) >> 18)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
                else if (u > 0x7ff){
                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
                else {
                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
            }
        }
    }
    return s0;
}

 

Server Code

@RequestMapping(value="/access",method = RequestMethod.POST)
public ModelAndView login(User user, Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) throws UnsupportedEncodingException {

    //암호화된 id, pw 복호화
    user.setPwd(Decrypt(user.getPwd()));
    user.setUser_id(Decrypt(user.getUser_id()));

    /**
    ~~~다른 코드
    */

    return new ModelAndView("redirect:" + path);
}



public String Decrypt(String str) throws UnsupportedEncodingException {
    str = new String(str.getBytes("8859_1"),"UTF-8");
    str = URLDecoder.decode(str,"UTF-8");
    str = StrtoUni(str);
    str = UnitoStr(str);

    return str;
}

//유니코드를 String 으로 바꿔주는 메소드
private String StrtoUni(String str){
    String uni="";
    for(int i=0;i<str.length();i++){

        if((i+1)%2==1){
            char char1=str.charAt(i);
            char char2=str.charAt(i+1);
            char chr=(char) (char1-char2);
            String hex=Integer.toHexString(chr);
            uni+="\\u"+hex;
        }

    }
    return uni;
}

// String을 유니코드로 바꿔주는 메소드
private String UnitoStr(String uni){

    String str="";
    StringTokenizer str1=new StringTokenizer(uni,"\\u");

    while(str1.hasMoreTokens()){
        String str2=str1.nextToken();
        int i=Integer.parseInt(str2,16);
        str+=(char)i;

    }
    return str;
}

 

 

 

도움이 되셨다면 공감버튼을 눌러주세요.🥰

반응형

댓글