● 관련내용 : http://www.okjsp.pe.kr/seq/62218
① 입력된 데이터를 암호화하는 서블릿 작성
파일명 : LocalEncrypter.java
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> 을 활용하여 암호화(변조, 복조)를 실시한다.
<%@ 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); 로 넣어준다.
<%@ 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>
이 글은 스프링노트에서 작성되었습니다.
실행결과 :
실행결과
차후에 사용자 비밀번호 입력 및 처리를 위해서 사용할 수 있을 듯 하다. ㅡㅅ-); 비밀번호를 그대로 문자열 그대로 저장할 수는 없지 않겠는가??