'jsp'에 해당되는 글 3건

허니몬에 관한 보고서


자, 여러분. 집에서 혼자 DSLR(Nikon D80)을 가지고서 증명사진을 만들기 위해 여러번 찍어보았습니다. ㅡㅅ-);; 의외로 돈이 많이 들었습니다(면접용 정장 한벌 구매했답니다. 정장 상하의, 셔츠, 타이까지. 대략 32만원... OTL... 쿨럭 비싸요!!). 저의 뻣뻣하게 굳어있는 증명사진을 봅시다!!

의외로 촉촉하게 젖은 눈망울로 나타나는 군요. 나름 눈을 크게 뜬다고 뜬건데!!!

왜,  증명사진에는 웃는 사진 넣으면 안되는 걸까요? ㅡㅅ-)? 저의 나름의 무기라면!! 저 해맑은(!?) 미소인데!! 흐음... 테러는 사양합니다. 우훗... OTL... 그래도 올해는 취업을 해야되지 않겠습니까?? 취업해야 장가도 가죠. 언제갈 수 있을지는 여전히 오리무중 미지수이지만, 그래도 마음의 준비는 항상 하고 있습니다.


회심의 미소를 날리고 있는... ㅡ_-);; 이건 아니다. 그나저나 저의 저 거뭇거뭇한 턱수염 라인은 참... 슬픕니다. ㅡㅅ-);


이건 한번 뽀샤시하게 만들어봤습니다. 오늘 사진 촬영을 하면서 느낀건데, 오랜 크로스백 착용 생활 습관 때문인지, 오른쪽 어깨가 많이 쳐져 있더군요. 조만간 운동을 시작하면서 좌우 밸런스를 맞추도록 해야겠습니다. 뱃살도 빼고... ㅡㅅ-);; 나이 서른도 되지 않았는데 아저씨 체형으로 변해가고 있습니다!! 우어어어어!!!!
유명한 인물도 아니지만... 초상권은 지켜주십시오. >ㅅ<)> 곧 유명해지기는 하겠지만... 아직은 안됩니다!! 후후훗. 퍼가시면 안됩니다. 라고 하지만, 블로그에 공개로 해놓으면, 퍼지는 걸 막을 수야 없겠죠?


최종 작업본 증명사진 입니다. 많이 깔끔해졌죠? OTL... 오랜만에 뽀샵 처리좀 해봤습니다. 안경에 반사광을 지우고, 턱수염을 조금... 덮어주었습니다. ㅡㅅ-)b 오홋!!! 나름 뽀사시한 남자!!가 되었습니다.

데이터를 제대로 챙겨오지를 못해서... OTL... 주말에 하려고 했던 일을 제대로 처리를 못했네요. 이런이런!! 다음에는 제대로 해줘야겠습니다. 이제 금요일이면, 프로젝트 발표 및 수료식이 있네요. 진정한 백수가 되어가고 있습니다.

이름 : 허니몬
이메일 : ihoneymon@gamil.com
나이 : 서른이 멀지 않은 29살.
사는 곳 : 경기도 남양주시 도농동 근처
근무가능지역 : 힘들기는 하지만, 구로까지도 커버 가능함.
사용가능 언어 : HTML, Javascript, PHP(앞에 세개는 약간만 할 줄 앎), Java, Servlet, JSP
SW 경험 :
- MS 계열 : XT 에서 MS-DOS 5.0 에서 시작, 윈도우 3.0, 윈도우 3.1, 윈도우 95, 98, 2000, ME, XP, VISTA, 7 경험함.
- Linux 계열 : Fedora, Ubuntu, Red hat 경험함.
- 응용프로그램 계열 : 프리미어, 3D max, 드림위버, 플래시, 포토샵 경험
-HW 경험 : XT -> AT ->  386 -> 486 -> 586(P4) -> 멀티코어, Linux 서버 경험, Win 2000 서버 경험.
자격증 : 정보처리기사, SCJP, OCP 취득예정(Admin II만 보면 됨, 8월 중순 이후 획득가능), 태권도 1단!!!, 운전면허증!!! 헌혈 50회(2009년 9월 현재)!! 골수기증 신청자!!
취미생활 : 트랙킹(걷기여행) + 사진촬영, 스쿠버다이빙, 독서, 어답터 흉내내기(흥미있는 것만)
관심사항 : UX, UI, JSF(ㅡㅅ-... 공부해야하는 것임), 새로운 것
사회경험 : 2년간 서울상수도사업본부 전산(PC)유지보수 업무 담당

위 사람을 데려가실 분, 안계신가요!? 신입입니다.
+_+) 데려가만 주신다면, 충성을 다하겠습니다. 2년 안에 허니몬 월드를 구축하여 여러분의 성공에 한몫 보태겠습니다.

허니몬의 IT 이야기/프로그래머, '코드 엔지니어'

기본적인 암호화 처리를 해주는 메소드를 살짝 변경하였습니다.  암호화키를 저장해주지 못하기 때문에 별도의 페이지에서는 사용이 어려웠음.

 

필요하시면, 가져다 쓰셔도 됩니다. ^^ 암호화된 코드에다가 자기만의 암호화 처리 방법을 넣어서 해주시면 좋습니다. +_+)b

returnEncryptCode(String str)  메소드는 입력받은 문자열을 암호화 한 다음, 암호화에 사용한 암호키와 암호화된 문자열을 합쳐서 반환합니다.
public String returnDecryptCode(String str)  메소드는 returnEncryptCode(String str) 메소드에서 처리한 암호화된 코드를 받으면, 특정 부분에서 잘라서 암호키를 키로 생성하고, 암호화된 코드를 넣어서 해독하여 해독된 문자열을 반환합니다.

 

JSP에서 처리할 경우에는 returnEncryptCode(String str)에서 반환된 문자열을 저장하는 문자열 혹은 객체를 저장하는 방법만 고려하면 되겠다.

 

  1. package encrypt;

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.security.InvalidKeyException;
    import java.security.Key;

    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;

    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
     
    public class LocalEncrypter{
        //DESede 는 암호화시 사용되는 최대 키 사이즈를 지정하는 키워드임 : 관련페이지 내용 링크
  2.     private static String algorithm = "DESede";
        private static Key    key       = null;
        private static Cipher cipher    = null;
     
       
        // 암호화 키를 발생시키는 메소드입니다.
        // com.sun.crypto.provider.DESedeKey@ + 16진수 8자리
        public LocalEncrypter() throws Exception {
            key = KeyGenerator.getInstance( algorithm ).generateKey();
           
    //        private static String keystr = String.valueOf(key);
    //        System.out.println(key);
    //        System.out.println("암호화 키의 형태 :"+ keystr);
    //        System.out.println(keystr.length());
           
            cipher = Cipher.getInstance( algorithm );   
        }
       
       
        //1. str 을 입력 받아서 이를 암호한다.    //2. 암호화 하는데 사용한 암호키를 encKey 로 문자열화 한다.
        //3. encKey + str 값을 반환한다. 크기는 408 byte
        public  static String returnEncryptCode(String str) throws Exception {
            byte [] encryptionBytes = null;
     

            // 입력받은 문자열을 암호화 하는 부분
            encryptionBytes = encrypt( str );
            BASE64Encoder encoder = new BASE64Encoder();

            //encoder.encode(encryptionBytes) 으로 encrypt 된 값 출력
            String encodeString = encoder.encode(encryptionBytes);
           
            // 키를 문자열로 바꿔주는 곳.
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(key);
            oos.close();
            BASE64Encoder b64enc = new BASE64Encoder();
            byte[] keyArr = bos.toByteArray();
            String encKey = b64enc.encode(keyArr);   
           
    //        System.out.println("문자열이 되어 저장된 키 : " + encKey);
    //        System.out.println("저장된 키의 길이 : " + encKey.length());
    //        System.out.println("암호화된 비밀번호 : " + encodeString);


    /*                // 암호화에 사용된 키값을 뽑아낸 수
             String keycode = keystr.substring(34,42);
             System.out.println("암호화에 사용된 키 : " + keycode);
             String randomcode = returnRandomCode();
             System.out.println("암호화된 코드 : " + encodeString);*/
            
            return encKey + encodeString;
        }

       
        //1. DB에 저장되어 있는 408 byte 길이의 str을 받는다.
        //2. 그중 0~384 까지의 암호화키(encKey)부분을 keycode로 뽑아낸다.
        //3. keycode를 Key에 대입한다.
        //4. 384~408 까지의 암호화된 문자열을 code로 뽑아낸다.
        //5. code를 해독한다.
        //6. 해독된 값을 반환한다.
        public String returnDecryptCode(String str) throws Exception {
            //복호화 하기 위해서는 암호화 키가 필요하다. ㅡㅅ-);;
            // 그래서 생각해낸 것이, DB에 저장될 때, 암호화키를 한번에 집어넣고....
            //substring 으로 잘라서 쓰는 것.
            int strLength = str.length();
           
            //암호화된 비밀번호에 저장되어 있는 암호화키를 추출.
               String keycode = str.substring(0,384);
              
              
               // 추출한 암호키를 KEY 형태로 다시 복구
               BASE64Decoder b64dec = new BASE64Decoder();
               byte[] b = b64dec.decodeBuffer(keycode);
               ByteArrayInputStream bis = new ByteArrayInputStream(b);
               ObjectInputStream ois = new ObjectInputStream(bis);
               key = (Key) ois.readObject();
               ois.close();
              
            String code = str.substring(384, strLength);
           
              
    //        System.out.println("저장된 코드 길이 : " + strLength);
    //           System.out.println("암호화 사용키 : " + keycode);
    //        System.out.println("암호화된 코드: " + code);
           
            BASE64Decoder decoder = new BASE64Decoder();
            String decode = decrypt( decoder.decodeBuffer(code));
           
    //        System.out.println("Ecrypt 에서 해독한 것 : " + decode);
            return decode;
        }
       
     
       
        // encryptionBytes = encrypt( input ), input을 변조하여 encryptionBytes에 대입함.
        private static byte [] encrypt(String input) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException  {
            cipher.init( Cipher.ENCRYPT_MODE, key );
            byte [] inputBytes = input.getBytes();
            return cipher.doFinal( inputBytes );
        }
     
       
       
        //decrypt( decoder.decodeBuffer(encodeString) ) 처리부분.
        private static String decrypt(byte [] encryptionBytes) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException{
            cipher.init( Cipher.DECRYPT_MODE, key);
            byte [] recoveredBytes = cipher.doFinal( encryptionBytes );
            String recovered = new String( recoveredBytes );
            return recovered;
        }
     
    }

이 글은 스프링노트에서 작성되었습니다.

허니몬의 IT 이야기/프로그래머, '코드 엔지니어'
if ( keyword != null ) {
     String charset[] = {"euc-kr", "ksc5601", "iso-8859-1", "8859_1", "ascii"};
     
     for(int k=0; k<charset.length ; k++){
             for(int l=0 ; l<charset.length ; l++){
                     if(k==l){
                             continue;
                     }else{
                             System.out.println(charset[k]+" : "+charset[l]+" :"+new String(keyword.getBytes(charset[k]),charset[l])+"<br>");
                     }
             }
     }
   }

ㅡㅅ-);; charset 형만 알아내는 거지, 그거에 대한 반환타입이 없어서...
조건식에다가 쓸 수가 없잖아!!!

자바내에서는 받는 파라메타의 charset 이 무엇인지 알아내는 메소드는 없는 듯 합니다. ㅡㅅ-);;
위의 식은 받은 문자열(keyword)을 반복문을 돌려서 문자셋을 바꿔가면서 출력하는 코드입니다.

출력결과를 확인하고서 파라메터가 어떤 charset으로 들어오는지 확인하고서 거기에 맞춰서 처리를 해줘야 한다.
우리 프로젝트 처리를 진행하면서는 크게 쓸모는 없었다. 자바스크립트를 통해서 파라메터를 생성해서 받는 것은
ISO8895_1 타입으로 하는 걸 알고 있으니까, 특정 조건을 만족했을 때, 해당 파라메터를 인코딩하도록 만들어 처리했다.


선생님께 여쭈어 또다른 방법을 알아냈다. get 방식으로 파라메터를 전달하는 자바스크립트 방식일 경우에 유용하다.
예 : javascript:location.href="list.jsp?page=555&subpage=444  의 경우

          //searchform 폼에서 입력한 값이 있을 경우 넣어줄 것 불러오기
          if ((request.getMethod()).equalsIgnoreCase("get") && category != null && keyword != null ) {
              keyword = new String(keyword.getBytes("ISO8859_1"), "EUC_KR");
          }

request 의 method 방법을 알아내는 메소드(함수) getMethod() 를 이용해서 "get" 방식을 경우에 변환해주는 방법입니다.

또다른 방법은 <form method="post" action="">을 하나 만들어서 그 안에다가 <input type="hidden" name=""> 으로 해서  해서 form.submit() 방식으로 다음페이지에서 필요한 값들을 넘기는 방법이 있다.


AJAX 실행한 단계에서 다음 페이지에서는
equest.setCharacterEncoding("euc-kr"); 의 식으로 코딩을 지정해주면 글자가 깨진다는 점을 주의하라.


1
블로그 이미지

Email : ihoneymon@gmail.com 안녕하세요, 꿀괴물 입니다. ^^ 멋진 비행을 준비 하는 블로그 입니다. 만능형 인간이 되어 많은 이들에게 인정받고, 즐겁고 행복하게 살기를 간절히 원합니다!! 달콤살벌한 꿀괴물의 좌충우돌 파란만장한 여정을 지켜봐주세요!! ^^

허니몬