package com.eactive.eai.util; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; //TOUSE //kbank 어댑터에서 업무데이터의 암호화 필드에 대한 암복호화 //OAuth2.0 의 ClientID를 통해 등록된 key를 조회하여 사용 public class CryptoUtil { public static final String defaultCharset = "utf-8"; private CryptoUtil() { } public static String encryptAES(String key, String text) { return encrypt(key, text, "AES"); } public static String decryptAES(String key, String base64EncodedText) { return decrypt(key, base64EncodedText, "AES"); } public static String encrypt(String key, String text, String algoritm) throws IllegalArgumentException { try { SecretKeySpec secureKey = new SecretKeySpec(key.getBytes(), algoritm); Cipher cipher = Cipher.getInstance(algoritm); cipher.init(Cipher.ENCRYPT_MODE, secureKey); byte[] encryptData = cipher.doFinal(text.getBytes(defaultCharset)); return new String(Base64.getEncoder().encode(encryptData)); } catch (Exception e) { throw new IllegalArgumentException(e.toString()); } } public static String decrypt(String key, String text, String algoritm) throws IllegalArgumentException { try { SecretKeySpec secureKey = new SecretKeySpec(key.getBytes(), algoritm); byte[] encryptedData = Base64.getDecoder().decode(text.getBytes(defaultCharset)); Cipher cipher = Cipher.getInstance(algoritm); cipher.init(Cipher.DECRYPT_MODE, secureKey); byte[] plainText = cipher.doFinal(encryptedData); return new String(plainText); } catch (Exception e) { throw new IllegalArgumentException(e.toString()); } } public static void main(String[] args) { String key = "ONAuROzlqWB4VuBwO5C/FA=="; String text = "Hello AES 한글"; // System.out.println("Original Text: " + text); long startEncryptTime = System.nanoTime(); String enc = encryptAES(key, text); long endEncryptTime = System.nanoTime(); long encryptDuration = endEncryptTime - startEncryptTime; // System.out.println("Encrypted Text: " + enc); // System.out.println("Encryption took: " + encryptDuration + " nanoseconds"); long startDecryptTime = System.nanoTime(); String dec = decryptAES(key, enc); long endDecryptTime = System.nanoTime(); long decryptDuration = endDecryptTime - startDecryptTime; // System.out.println("Decrypted Text: " + dec); // System.out.println("Decryption took: " + decryptDuration + " nanoseconds"); } }