아주아주 간단한 암호화 모듈을 하나 소개 합니다.

암호화 : 키 값을 정하고 정한 키값과 스트링을 입력해서 암호화된 스트링을

반환 받습니다.

복호화 : 키 값과 암호화 된 스트링을 입력하면 원래의 암호화 되기 전 스트링 값을 리턴 받습니다.

 

소스는 아래와 같습니다.

 

package enc;


import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * Usage:
 * 
 * String crypto = SimpleCrypto.encrypt(masterpassword, cleartext)
 * ...
 * String cleartext = SimpleCrypto.decrypt(masterpassword, crypto)
 * 
* @author ferenc.hechler */ public class SimpleCrypto { private final static String HEX = "0123456789ABCDEF"; public static String encrypt(String seed, String cleartext) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] result = encrypt(rawKey, cleartext.getBytes()); return toHex(result); } public static String decrypt(String seed, String encrypted) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] enc = toByte(encrypted); byte[] result = decrypt(rawKey, enc); return new String(result); } private static byte[] getRawKey(byte[] seed) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(seed); kgen.init(128, sr); SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); return raw; } private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(clear); return encrypted; } private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] decrypted = cipher.doFinal(encrypted); return decrypted; } public static String toHex(String txt) { return toHex(txt.getBytes()); } public static String fromHex(String hex) { return new String(toByte(hex)); } public static byte[] toByte(String hexString) { int len = hexString.length()/2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue(); return result; } public static String toHex(byte[] buf) { if (buf == null) return ""; StringBuffer result = new StringBuffer(2*buf.length); for (int i = 0; i < buf.length; i++) { appendHex(result, buf[i]); } return result.toString(); } private static void appendHex(StringBuffer sb, byte b) { sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f)); } public static void main(String args[]) { SimpleCrypto cr = new SimpleCrypto(); // 암호화 Key 설정 String key = "EncTestByKimByoungKi"; try { System.out.println("Encryped ID1 : " + cr.encrypt(key, "tds")); System.out.println("Encryped PW1 : " + cr.encrypt(key, "1qaz@WSX")); System.out.println("Encryped ID2 : " + cr.encrypt(key, "tds_dev2")); System.out.println("Encryped PW2 : " + cr.encrypt(key, "dnsdud123!")); System.out.println("Encryped ID1 : " + cr.decrypt(key, "58544B468EE67EB87FF2A617FFB7D7C0")); System.out.println("Encryped PW1 : " + cr.decrypt(key, "C9D99D34BB00936FA1C0731D98873CE2")); System.out.println("Encryped ID2 : " + cr.decrypt(key, "4D7E7AD0670DC2FCD0E9D7D4C98008A8")); System.out.println("Encryped PW2 : " + cr.decrypt(key, "3DFB2746F3CBD8D87D7E239DD7ADBE4C")); } catch (Exception e) { e.printStackTrace(); } } }

이클립스 등에서 실행 해보면 간단한 암/복호화를 실제 해볼 수 있습니다.

 

'Languages > Java' 카테고리의 다른 글

AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
EJB란?  (1) 2012.06.21
POJO란 무엇인가?  (0) 2012.06.21
History of Java  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,