반응형
중요정보가 평문으로 전송이 된다면?
- 사용자 계정 유출 위험
- 카드 정보 유출 위험
- 결제 정보 유출 위험
등이 있다.
위와같이 내 소중한 정보가 남에게 유출당해 알 수 있는것을 사용자는 원치 않는다.
그런 웹페이지를 만들어서도 안된다.
그러므로 중요정보는 암호화하여 전송해, 그 사용자가 알 수 없게 해야한다.
아래는 내가 사용한 방법이다.
암호화/복호화의 방법은 많을테니 꼭 이 코드를 사용하지 않아도 된다.
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;
}
도움이 되셨다면 공감버튼을 눌러주세요.🥰
반응형
'개발일지 > 기타' 카테고리의 다른 글
[Install shield] 실행 파일 없는 프로젝트 인스톨 파일 만들기 (0) | 2022.04.29 |
---|---|
[web hacking] 프록시 도구(Burp Suite)를 이용한 웹 해킹 및 대응 (0) | 2022.04.28 |
[Laravel] 라라벨 디버그 바, 디버그 페이지 정리 (0) | 2022.04.20 |
[Laravel] 라라벨 설치 방법(원하는 버전으로 설치하기) (0) | 2022.04.18 |
[Linux] JAVA 환경변수 설정(Web Applicaion) (0) | 2022.04.15 |
댓글