728x90
개발을 할 때보면 파라미터를 숨겨야 할 때가 있다. 이때 유용하게 사용한 Base64와 AES128가 있다.
AES128 암복호화 코드
public class Aes128 {
private static final Charset ENCODING_TYPE = StandardCharsets.UTF_8;
private static final String INSTANCE_TYPE = "AES/ECB/PKCS5Padding";
private SecretKeySpec secretKeySpec;
private Cipher cipher;
public Aes128(final String key) {
try {
byte[] keyBytes = key.getBytes(ENCODING_TYPE);
secretKeySpec = new SecretKeySpec(keyBytes, "AES");
cipher = Cipher.getInstance(INSTANCE_TYPE);
} catch (NoSuchPaddingException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/*
* 암호화
*
* @param str
*/
public String encrypt(final String str) throws Exception {
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] ecrypted = cipher.doFinal(str.getBytes(ENCODING_TYPE));
return new String(Base64.getEncoder().encode(ecrypted), ENCODING_TYPE);
}
/*
* 복호화
*
* @param str
*/
public String decrypt(final String str) throws Exception {
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decrypted = Base64.getDecoder().decode(str);
return new String(cipher.doFinal(decrypted), ENCODING_TYPE);
}
}
암복호화 예제
public static void main(String[] args) throws Exception {
String key = "aeskey1234567898"; // 128비트(16바이트)의 키
String te = "암호화할 문자";
String ret = "복호화할 문자";
Aes128 aes128 = new Aes128(key);
// 먼저 AES128로 1차 암호화. 마지막 글자가 =로 끝난다.
String aesEncode = aes128.encrypt(te);
log.debug("aesEncode: " + aesEncode);
// AES128로 암호화한 문자를 다시 URL인코더로 2 암호화하기. 중간에 %가 삽입된다.
String urlEncode = URLEncoder.encode(aesEncode, "UTF-8");
log.debug("urlEncode: " + urlEncode);
// 복호화 할 땐 반대로 URL디코더로 1차 복호화 후
String urlDecode = URLDecoder.decode(ret, "UTF-8");
log.debug("urlDecode: "+urlDecode);
// AES128로 2차 복호화한다.
String aesDecode = aes128.decrypt(urlDecode);
log.debug("aesDecode: "+aesDecode);
}
암호화 결과
복호화 결과
'개발 공부 > 기록' 카테고리의 다른 글
[Linux] CentOS 로그인 시 bash-4.2$ 해결하기 (0) | 2023.04.27 |
---|---|
[SVN] 커밋 후 파일에 빨간색 화살표 (0) | 2023.02.08 |
[Javascript] 웹 페이지 새로고침, 뒤로가기 및 더블 클릭 막기 (0) | 2023.01.03 |
[Tomcat] 이클립스 비정상 종료 후 톰캣 서버 충돌 해결하기 (0) | 2022.09.15 |
[MyBatis] snake_case에서 camleCase로 자동 변환 (0) | 2021.10.27 |