1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | public class CipherUtil { private Log LOG = LogFactory.getLog( this .getClass()); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub CipherUtil cu = new CipherUtil(); Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssss" ); String key = sdf.format(cal.getTime()); System.out.println( "key: " + key); String text = "가나다라마바사@★아&자@12!@#$%" ; String encryptText = null ; String decryptText = null ; try { encryptText = cu.encryptAES(text, key); decryptText = cu.decryptAES(encryptText, key); } catch (Exception e) { e.printStackTrace(); } System.out.println( "encryptText: " + encryptText); System.out.println( "beforeText : " + text); System.out.println( "decryptText: " + decryptText); // 2011051813190051 // abcdefgh01234567 } // key는 16바이트로 구성 되어야 한다. private String encryptAES(String s, String key) throws Exception { String encrypted = null ; try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES" ); Cipher cipher = Cipher.getInstance( "AES" ); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); encrypted = byteArrayToHex(cipher.doFinal(s.getBytes())); return encrypted; } catch (Exception e) { if (LOG.isErrorEnabled()) { LOG.error(e.getMessage(), e); } throw e; } } // key는 16 바이트로 구성 되어야 한다. private String decryptAES(String s, String key) throws Exception { String decrypted = null ; try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES" ); Cipher cipher = Cipher.getInstance( "AES" ); cipher.init(Cipher.DECRYPT_MODE, skeySpec); decrypted = new String(cipher.doFinal(hexToByteArray(s))); return decrypted; } catch (Exception e) { if (LOG.isErrorEnabled()) { LOG.error(e.getMessage(), e); } throw e; } } private byte [] hexToByteArray(String s) { byte [] retValue = null ; if (s != null && s.length() != 0 ) { retValue = new byte [s.length() / 2 ]; for ( int i = 0 ; i < retValue.length; i++) { retValue[i] = ( byte ) Integer.parseInt(s.substring( 2 * i, 2 * i + 2 ), 16 ); } } return retValue; } private String byteArrayToHex( byte buf[]) { StringBuffer strbuf = new StringBuffer(buf.length * 2 ); for ( int i = 0 ; i < buf.length; i++) { if ((( int ) buf[i] & 0xff ) < 0x10 ) { strbuf.append( "0" ); } strbuf.append(Long.toString(( int ) buf[i] & 0xff , 16 )); } return strbuf.toString(); } } |
[출처] 구글링