'분류 전체보기'에 해당되는 글 1286건

허니몬에 관한 보고서/예측불허 허니몬
  • 모바일 페이지를 만들어보려 하는데… ㅡㅅ-);; 800 * 480을 기본으로 해서, 경우에 따라서는 480 * 800 으로 봐도 무난한 형태로 고려를 해야하는구나. 내 머리 뽀게지겠다!!(흠... ㅡㅅ-)> 이제 마지막 일주일 남았구나. 나도 곧 다시 사회인!! me2google)2009-08-02 21:40:43
  • Eclipse Galileo 괜찮은데… +_+) JSP 작업할 때 자동으로 닫아주는 태그를 붙여준다… ㅎㅎ 가끔 작업하다가 보면 빼먹어서 페이지가 이상해지는 경우가 생기는데… 좋군!!(이클립스, 갈릴레오, eclipse, galileo, 자동 태그 완성 기능 me2google)2009-08-02 21:43:46

이 글은 허니몬님의 2009년 8월 2일의 미투데이 내용입니다.

허니몬에 관한 보고서/예측불허 허니몬
  • 오늘은 무더울 것 같은 8월 1일. 7월 한달을 돌아보면… '나, 뭐했니?' 하는 생각을 들게 한다. 프로젝트를 위해 달려온 한달… 그 결과물들이 초라하지만 그 형태를 갖춰간다.(거기서 약간의 보람을 느낀다....랄까?)2009-08-01 10:59:23
  • 그래도 저녁에는 제법 선선하군요^^(me2mobile 토요일밤에~!)2009-08-01 19:14:19
  • ㅡㅅ-)> 저두 양재 영동족발에 쇠주한잔했어요!! 오홋!!(me2mobile 소주반병마시고취한다!!오홋!!)2009-08-01 21:36:42
  • 때와 장소는 가려주세요….(굿나잇... ㅡㅅ-)>)2009-08-02 00:13:28

이 글은 허니몬님의 2009년 8월 1일에서 2009년 8월 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 이야기/프로그래머, '코드 엔지니어'

인터넷 검색을 통하여 찾아본 구현 방법들은 서블릿에서 저장된 것들을 처리하는 방법들 뿐이었음.

나름 독자적인(?!) 해석을 통하여 JSP로만 구현하는 방법을 터득했다. 이를 이용할 예정임.

현재 진행중인 프로젝트가 완료되면 특별한 기능이 있을 경우, 기재를 하여 설명드리도록 하겠음.


JFeeChart 구현과 관련된 JAR 파일들

1) jfreechart-1.0.0-pre2.jar

2) jcommon-1.0.0-pre2.jar

메뉴얼 API : http://www.jfree.org/jfreechart/api/javadoc/index.html


  1. <%@ page language="java" contentType="text/html; charset=EUC-KR"  pageEncoding="EUC-KR"%>
    <%@ page import="java.io.*" %>
    <%@ page import="org.jfree.data.general.DefaultPieDataset"%>
    <%@ page import="org.jfree.chart.JFreeChart"%>
    <%@ page import="org.jfree.chart.plot.PiePlot"%>
    <%@ page import="org.jfree.chart.ChartRenderingInfo"%>
    <%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
    <%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
    <%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
    <%@ page import="org.jfree.chart.ChartFactory"%>
    <%@ page import="org.jfree.chart.ChartUtilities"%>
    <%@ page import="org.jfree.data.general.PieDataset"%>
    <%@ page import="org.jfree.data.category.DefaultCategoryDataset"%>
    <%@ page import="org.jfree.chart.plot.PlotOrientation"%>
    <%@ page import="org.jfree.chart.servlet.*"%>
    <%@ page import="com.oreilly.servlet.*" %>
    <%@ page import="com.oreilly.servlet.multipart.*" %>


    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    <title>JChart 연습하기</title>
    </head>
    <body>
       <%
           DefaultPieDataset ds = new DefaultPieDataset();
           ds.setValue("홍길동", new Double(40.0));
           ds.setValue("홍길숙", new Double(25.0));
           ds.setValue("기타", new Double(15.0));
          
           JFreeChart chart = ChartFactory.createPieChart("득점분포", ds, true, true, false);
           chart.setBackgroundPaint(java.awt.Color.white);
            chart.setTitle("JChart 연습하기");
            
            ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
          
            
           //PNG 파일명을 만들어내기
            String fileName = ServletUtilities.saveChartAsPNG(chart, 600, 300, info, session);           
          
            System.out.println("파일명 : " +fileName);
            
           //특정 임시 폴더에 이미지 파일을 만들어냄.
            String dir = application.getRealPath("/upload/"); // 파일경로 지정
            dir = "D:\\" + dir.substring(3) + "/";
            String filepath = dir + fileName;
            //System.out.println("File path = "+ filepath);
     
            FileOutputStream fos = new FileOutputStream(new File(filepath));
            File f = new File(filepath);
            ChartUtilities.writeChartAsPNG(fos, chart, 600, 300);
            
            String graphURL = request.getContextPath() + "/upload/" + fileName;
            //System.out.println(graphURL);
           %>
           <img src="<%=graphURL%>"/> <!--//파일 경로와 파일명을 받아서 차트를 보여줌-->

    </body>
    </html>

● 파일명 : jfreechart-2348981821190451270.png (파일명은 ServletUtilities.saveChartAsPNG(chart, 600, 300, info, session); 에 의해서 임의 지정됨)
● File path = D:\workspace\project\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\WomanHappy\upload/jfreechart-2348981821190451270.png  // 웹 서버에 저장된 실제 주소
● /WomanHappy/upload/jfreechart-2348981821190451270.png // 서버에 저장된 주소

JFreeChart.JPG <결과물>

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

허니몬에 관한 보고서/예측불허 허니몬
  • 오늘도 동부간선도로는 막히는군요^^;; 역시 서울진입은 대중교통이용!! 울동네.. 버스중앙차로로 만든다고 육교 모두해체(me2mobile ㅡㅅ-) 흠..2주전까지는 멀쩡했는데.. 변화가 낯설어^^;;)2009-07-31 07:35:33
  • 녹색성장을 빙자한 녹색테러!! 앞으로 자주 '차없는 거리'라며 교통통제를 할듯함..?? 대중교통을 더욱 발전시켜랏!!(me2mobile 9.22일경 강남쪽 차없는 거리.. 행사한다고 함.. 이건 예고된 녹색테러!!)2009-07-31 07:39:32
  • 예수의 피에 영생의 기운이 있다라면.. ㅡㅅ-)> 테러들어가봅니다. 당신의 목덜미를 살포시 물어드리리다..^+_+^)b(me2mobile 당신께서는 자기희생의 상징이시니까 기꺼이 목을 내주시..응?? 나에게 사악한 기운이!? 절대선도 절대악도 순수하긴 마찬가지!! 절대악이 되리랏!!)2009-07-31 07:47:23
  • 형태는 기능을 따른다., 생물학도로서의 내생각: 기능은 요구를 따른다.(me2mobile 생물의 형태는 생존을 위한 돌연변이적 발생에서 비롯되며 그런 돌연변이는 생을 위한 필요에 의해 발생한다. ㅡㅅ-)> 인간은..??)2009-07-31 07:59:10
  • 오늘은 아침부터 뭔가 마음에 안드는 것이 있는가부닷.. 계속 퉁퉁거린닷..!?(me2mobile 피곤해서 그런가!? 통장 잔고가 줄어서 그런가!? 영생 예수를 믿으라는 사이비 신도의 설교때문인가? 아니면 음악을 듣지 못하기 때문인가? 아니면..!?)2009-07-31 08:02:05
  • 'Danger HoneyMon' 이라고 붉게 페인팅된 흰색남방을 입고 싶구나..!! 갖고싶구나!!(me2mobile 문득 그래^^;;)2009-07-31 08:15:07
  • 오늘 힘들어 보인다는 이야기에 다른거 제껴두고 집으로 들어가는 중!! 내집이 젤편하다!!(me2mobile 휴가를 떠나고 싶은 마음은 굴뚝같다..)2009-07-31 19:43:35
  • 이번주말에는 제대로 릴렉스!!해야하지만 맡은바 소임을 다해야하므로 토요일은 열심히 달려줘야지!!(me2mobile 우호호!! 고기!! 고기!!)2009-07-31 19:55:56
  • 오늘은 오랜만에 일찍잡니다^^♥ 모두 굳나잇!!(me2mobile 덥네요!!)2009-07-31 22:15:05

이 글은 허니몬님의 2009년 7월 31일의 미투데이 내용입니다.

1 ··· 174 175 176 177 178 179 180 ··· 258
블로그 이미지

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

허니몬