좀 느려서 그렇지 그래도 암호/복호화가 필요하면 많이 쓰이는 기법이지요
어서 줏어듣기로는 키를 모르면 일일이 푸는데 계산상 100년이걸린다고 합니다;
-----------------------------------------------------------------------------------------
package AES;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AES {
// 128 비트는 키가 16글자, 192, 256비트는 각각 24, 32글자임
public static String key = "wtfrudoinganpang";
/**
* hex to byte[] : 16진수 문자열을 바이트 배열로 변환한다.
*
* @param hex hex string
* @return
*/
public static byte[] hexToByteArray(String hex) {
if (hex == null || hex.length() == 0) {
return null;
}
byte[] ba = new byte[hex.length() / 2];
for (int i = 0; i < ba.length; i++) {
ba[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
}
return ba;
}
/**
* byte[] to hex : unsigned byte(바이트) 배열을 16진수 문자열로 바꾼다.
*
* @param ba byte[]
* @return
*/
public static String byteArrayToHex(byte[] ba) {
if (ba == null || ba.length == 0) {
return null;
}
StringBuffer sb = new StringBuffer(ba.length * 2);
String hexNumber;
for (int x = 0; x < ba.length; x++) {
hexNumber = "0" + Integer.toHexString(0xff & ba[x]);
sb.append(hexNumber.substring(hexNumber.length() - 2));
}
return sb.toString();
}
/**
* AES 방식의 암호화
*
* @param message
* @return
* @throws Exception
*/
public static String encrypt(String message) throws Exception {
// use key coss2
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
// Instantiate the cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(message.getBytes());
return byteArrayToHex(encrypted);
}
/**
* AES 방식의 복호화
*
* @param message
* @return
* @throws Exception
*/
public static String decrypt(String encrypted) throws Exception {
// use key coss2
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] original = cipher.doFinal(hexToByteArray(encrypted));
String originalString = new String(original);
return originalString;
}
public static void main(String[] args)
{
try {
String encrypt = encrypt("test1234");
System.out.println("origin str = "+"test1234");
System.out.println("encrypt str = "+encrypt);
String decrypt = decrypt(encrypt);
System.out.println("decrypt str = "+decrypt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
'개발 > JAVA' 카테고리의 다른 글
Java xml 프레임워크 설정시 DTD 내장방법 (1) | 2012.07.03 |
---|---|
Tomcat7 tomcat-jdbc 설정 - Broken pipe 에러 회피 (0) | 2012.04.25 |
iBatis 에서 동적쿼리 사용 (1) | 2011.05.20 |
JSmooth와 이클립스 Visual Editor를 이용한 Swing 어플개발 (0) | 2011.02.18 |