From 3e16b13d7265518ad140433273101a9d4a4f694d Mon Sep 17 00:00:00 2001 From: jaewohong Date: Mon, 13 Oct 2025 13:59:29 +0900 Subject: [PATCH] =?UTF-8?q?KJBank=20=EC=95=94=ED=98=B8=ED=99=94=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/crypto/AES256KJDecrypt.java | 52 +++++++++++++ .../function/crypto/AES256KJEncrypt.java | 52 +++++++++++++ .../function/crypto/SeedKJDecrypt.java | 64 ++++++++++++++++ .../function/crypto/SeedKJEncrypt.java | 74 +++++++++++++++++++ 4 files changed, 242 insertions(+) create mode 100644 src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJDecrypt.java create mode 100644 src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJEncrypt.java create mode 100644 src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJDecrypt.java create mode 100644 src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJEncrypt.java diff --git a/src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJDecrypt.java b/src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJDecrypt.java new file mode 100644 index 0000000..77faf6d --- /dev/null +++ b/src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJDecrypt.java @@ -0,0 +1,52 @@ +package com.eactive.eai.transformer.function.crypto; + +import java.util.Stack; + +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommand; +import java.nio.charset.StandardCharsets; + +// kj bank import 2025-09-23 jwhong +import com.kjbank.encrypt.exchange.crypto.AES256Cipher; + +public class AES256KJDecrypt extends PostfixMathCommand { + public AES256KJDecrypt() { + numberOfParameters = 1; + } + + public void run(Stack inStack) throws ParseException { + checkStack(inStack); + + Object param = inStack.pop(); + + byte[] value = null; + + if (param instanceof String) { + value = ((String) param).getBytes(); + } else if (param instanceof byte[]) { + value = (byte[]) param; + } else if (param instanceof Double) { + if (((Double) param).doubleValue() == Math.round(((Double) param).doubleValue())) { + value = new Long(Math.round(((Double) param).doubleValue())).toString().getBytes(); + } else { + value =((Number) param).toString().getBytes(); + } + } else if (param instanceof Number) { + value = ((Number) param).toString().getBytes(); + } else if (param == null) { + inStack.push(null); + return; + } else { + throw new ParseException("Function의 파라미터 인수가 byte[] 또는 String이 아닙니다. : " + param); + } + + try { + String key = "0123456789abcdefghij0123456789ab"; + String decryptedData = AES256Cipher.decrypt(new String(value, StandardCharsets.UTF_8), key); + inStack.push(decryptedData); + } catch (Exception e) { + //throw new ExecutionException(e.getMessage(), parameters, e); + throw new ParseException(e.getMessage(), e); + } + } +} diff --git a/src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJEncrypt.java b/src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJEncrypt.java new file mode 100644 index 0000000..20bd76e --- /dev/null +++ b/src/main/java/com/eactive/eai/transformer/function/crypto/AES256KJEncrypt.java @@ -0,0 +1,52 @@ +package com.eactive.eai.transformer.function.crypto; + +import java.util.Stack; + +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommand; +import java.nio.charset.StandardCharsets; + +// kj bank import 2025-09-23 jwhong +import com.kjbank.encrypt.exchange.crypto.AES256Cipher; + +public class AES256KJEncrypt extends PostfixMathCommand { + public AES256KJEncrypt() { + numberOfParameters = 1; + } + + public void run(Stack inStack) throws ParseException { + checkStack(inStack); + + Object param = inStack.pop(); + + byte[] value = null; + + if (param instanceof String) { + value = ((String) param).getBytes(); + } else if (param instanceof byte[]) { + value = (byte[]) param; + } else if (param instanceof Double) { + if (((Double) param).doubleValue() == Math.round(((Double) param).doubleValue())) { + value = new Long(Math.round(((Double) param).doubleValue())).toString().getBytes(); + } else { + value =((Number) param).toString().getBytes(); + } + } else if (param instanceof Number) { + value = ((Number) param).toString().getBytes(); + } else if (param == null) { + inStack.push(null); + return; + } else { + throw new ParseException("Function의 파라미터 인수가 byte[] 또는 String이 아닙니다. : " + param); + } + + try { + String key = "0123456789abcdefghij0123456789ab"; + String encryptedData = AES256Cipher.encrypt(new String(value, StandardCharsets.UTF_8), key); + inStack.push(encryptedData); + } catch (Exception e) { + //throw new ExecutionException(e.getMessage(), parameters, e); + throw new ParseException(e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJDecrypt.java b/src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJDecrypt.java new file mode 100644 index 0000000..4d753f6 --- /dev/null +++ b/src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJDecrypt.java @@ -0,0 +1,64 @@ +package com.eactive.eai.transformer.function.crypto; + +import java.util.Stack; + +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommand; + +import com.eactive.eai.common.property.PropManager; + +import java.nio.charset.StandardCharsets; + +import org.apache.commons.lang3.StringUtils; +// kj bank import 2025-09-23 jwhong +//import org.kjbank.simple.core.crypto.seed.SeedUtil; +import com.eactive.eai.common.seed.SeedKJ; + + +public class SeedKJDecrypt extends PostfixMathCommand { + public SeedKJDecrypt() { + numberOfParameters = 2; + } + + public void run(Stack inStack) throws ParseException { + checkStack(inStack); + + // 아니면 USER FUNCTION에서 Parameter 에서 가져와야 하나 + Object param2 = inStack.pop(); + String param2Str = String.valueOf(param2); // null 안전 처리 + String decryptKey = StringUtils.leftPad(param2Str, 16, '0'); + + Object param = inStack.pop(); + + byte[] value = null; + + if (param instanceof String) { + value = ((String) param).getBytes(); + } else if (param instanceof byte[]) { + value = (byte[]) param; + } else if (param instanceof Double) { + if (((Double) param).doubleValue() == Math.round(((Double) param).doubleValue())) { + value = new Long(Math.round(((Double) param).doubleValue())).toString().getBytes(); + } else { + value =((Number) param).toString().getBytes(); + } + } else if (param instanceof Number) { + value = ((Number) param).toString().getBytes(); + } else if (param == null) { + inStack.push(null); + return; + } else { + throw new ParseException("Function의 파라미터 인수가 byte[] 또는 String이 아닙니다. : " + param); + } + + try { + String decryptedData = SeedKJ.decrypt(new String(value, StandardCharsets.UTF_8), decryptKey); + //String decryptedData = SeedUtil.decrypt(new String(value, StandardCharsets.UTF_8),decryptKey); // 이건 광주 jar 사용 + inStack.push(decryptedData); + //inStack.push(SeedUtil.encrypt(new String(value, StandardCharsets.UTF_8),"testkey123")); + } catch (Exception e) { + //throw new ExecutionException(e.getMessage(), parameters, e); + throw new ParseException(e.getMessage(), e); + } + } +} diff --git a/src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJEncrypt.java b/src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJEncrypt.java new file mode 100644 index 0000000..28ba3b3 --- /dev/null +++ b/src/main/java/com/eactive/eai/transformer/function/crypto/SeedKJEncrypt.java @@ -0,0 +1,74 @@ +package com.eactive.eai.transformer.function.crypto; + +import java.util.Stack; + +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommand; + +import com.eactive.eai.common.property.PropManager; + +import java.nio.charset.StandardCharsets; + +// kj bank import 2025-09-23 jwhong +import com.eactive.eai.common.seed.SeedKJ; +import com.eactive.eai.common.seed.SeedCipher; +import org.apache.commons.lang3.StringUtils; +import java.util.Base64; +//import org.kjbank.simple.core.crypto.seed.SeedUtil; + +public class SeedKJEncrypt extends PostfixMathCommand { + public SeedKJEncrypt() { + numberOfParameters = 2; + } + + public void run(Stack inStack) throws ParseException { + checkStack(inStack); + + // PROPERTY 에서 가져와야 하나 + //PropManager propManager = PropManager.getInstance(); + //String safeDbPath = propManager.getProperty("SafeDB","safedb.path"); + + SeedCipher seedCiper = new SeedCipher(); + + // 아니면 USER FUNCTION에서 Parameter 에서 가져와야 하나 + Object param2 = inStack.pop(); + String param2Str = String.valueOf(param2); // null 안전 처리 + String encryptKey = StringUtils.leftPad(param2Str, 16, '0'); + + Object param = inStack.pop(); + + byte[] value = null; + + if (param instanceof String) { + value = ((String) param).getBytes(); + } else if (param instanceof byte[]) { + value = (byte[]) param; + } else if (param instanceof Double) { + if (((Double) param).doubleValue() == Math.round(((Double) param).doubleValue())) { + value = new Long(Math.round(((Double) param).doubleValue())).toString().getBytes(); + } else { + value =((Number) param).toString().getBytes(); + } + } else if (param instanceof Number) { + value = ((Number) param).toString().getBytes(); + } else if (param == null) { + inStack.push(null); + return; + } else { + throw new ParseException("Function의 파라미터 인수가 byte[] 또는 String이 아닙니다. : " + param); + } + + try { + //byte[] bbb =seedCiper.encrypt(new String(value, StandardCharsets.UTF_8), encryptKey.getBytes()); + //String encryptedData = Base64.getEncoder().encodeToString(bbb); + String encryptedData = SeedKJ.encrypt(new String(value, StandardCharsets.UTF_8), encryptKey); + + //String encryptedData = SeedUtil.encrypt(new String(value, StandardCharsets.UTF_8),encryptKey); + + inStack.push(encryptedData); + } catch (Exception e) { + //throw new ExecutionException(e.getMessage(), parameters, e); + throw new ParseException(e.getMessage(), e); + } + } +} \ No newline at end of file