● 관련내용 : http://www.okjsp.pe.kr/seq/62218

① 입력된 데이터를 암호화하는 서블릿 작성

파일명 : LocalEncrypter.java

  1. package encrypt;

    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 는 암호화시 사용되는 최대 키 사이즈를 지정하는 키워드임 : 관련페이지 내용 링크
        private static String algorithm = "DESede";
        private static Key    key       = null;
        private static Cipher cipher    = null;
     
        public static String returnEncryptCode(String str) throws Exception {
            byte [] encryptionBytes = null;
           
            setUp();
                  
            // 입력받은 문자열을 암호화 하는 부분
            encryptionBytes = encrypt( str );
            BASE64Encoder encoder = new BASE64Encoder();
             String encodeString = encoder.encode(encryptionBytes);
             //encoder.encode(encryptionBytes) 으로 encrypt 된 값 출력
            return encodeString;
        }

       private static void setUp() throws Exception {
            key = KeyGenerator.getInstance( algorithm ).generateKey();
            cipher = Cipher.getInstance( algorithm );
        }

        public static String returnDecryptCode(String str) throws Exception {
            BASE64Decoder decoder = new BASE64Decoder();
            String decode = decrypt( decoder.decodeBuffer(str) );
            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;
        }
     
    }

 

② 간단한 입력폼 : InputCode.jsp

이 곳에서 문자열을 입력받아, InputCodeProc.jsp 에서 <jsp:useBean> 을 활용하여 암호화(변조, 복조)를 실시한다.

  1. <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!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>Insert title here</title>
    </head>
    <body>
        <form method=post action='InputCodeProc.jsp'>
        <table border='1'>
        <tr><th>키워드입력</th><td><input type='text' name='code'></td></tr>
        <tr><td colspan='2'><input type='submit'></td></tr>
        </form>
    </body>
    </html>

 

③ 암호화처리 : InputCodeProc.jsp

InputCode.jsp 에서 code 파라메터를 받아내서 LocalEncrypter.java 에서 returnEncryptCode(code); 로 넣어준다.

  1. <%@ page language="java" contentType="text/html; charset=EUC-KR"  pageEncoding="EUC-KR"%>
    <jsp:useBean id="enc" class="encrypt.LocalEncrypter" />
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            String str = request.getParameter("code");
            String encryptcode = enc.returnEncryptCode(str);       
        %>
        <h3> 입력받은 코드 Encrypt 처리결과 : <%= encryptcode %></h3>
        <hr>
        <%
            String decryptcode = enc.returnDecryptCode(encryptcode);
        %>
        <h3> Encrypt 된 문자열을 Decrypt 한 결과 : <%= decryptcode %></h3>
        <hr>

    </body>
    </html>

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



실행결과 :

실행결과

차후에 사용자 비밀번호 입력 및 처리를 위해서 사용할 수 있을 듯 하다. ㅡㅅ-); 비밀번호를 그대로 문자열 그대로 저장할 수는 없지 않겠는가??

+ Recent posts