refactor: remove codec dependency

This commit is contained in:
ReaJason
2025-04-06 13:55:17 +08:00
parent f57ee7536c
commit accf83ac9d
22 changed files with 71 additions and 40 deletions
-2
View File
@@ -43,13 +43,11 @@ dependencies {
implementation 'javax.servlet:javax.servlet-api' implementation 'javax.servlet:javax.servlet-api'
implementation 'javax.websocket:javax.websocket-api' implementation 'javax.websocket:javax.websocket-api'
implementation 'jakarta.servlet:jakarta.servlet-api'
implementation 'org.apache.bcel:bcel' implementation 'org.apache.bcel:bcel'
implementation 'commons-io:commons-io' implementation 'commons-io:commons-io'
implementation 'org.apache.commons:commons-lang3' implementation 'org.apache.commons:commons-lang3'
implementation 'commons-codec:commons-codec'
implementation 'com.squareup.okhttp3:okhttp' implementation 'com.squareup.okhttp3:okhttp'
implementation 'ch.qos.logback:logback-classic' implementation 'ch.qos.logback:logback-classic'
implementation 'com.alibaba.fastjson2:fastjson2' implementation 'com.alibaba.fastjson2:fastjson2'
@@ -4,8 +4,8 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.apache.commons.codec.binary.Base64;
import java.util.Base64;
import java.util.Map; import java.util.Map;
/** /**
@@ -33,11 +33,11 @@ public class GenerateResult {
public static class GenerateResultBuilder { public static class GenerateResultBuilder {
public GenerateResult build() { public GenerateResult build() {
if (shellBytes != null) { if (shellBytes != null) {
shellBytesBase64Str = Base64.encodeBase64String(shellBytes); shellBytesBase64Str = Base64.getEncoder().encodeToString(shellBytes);
shellSize = shellBytes.length; shellSize = shellBytes.length;
} }
if (injectorBytes != null) { if (injectorBytes != null) {
injectorBytesBase64Str = Base64.encodeBase64String(injectorBytes); injectorBytesBase64Str = Base64.getEncoder().encodeToString(injectorBytes);
injectorSize = injectorBytes.length; injectorSize = injectorBytes.length;
} }
return new GenerateResult(shellClassName, shellBytes, shellSize, shellBytesBase64Str, return new GenerateResult(shellClassName, shellBytes, shellSize, shellBytesBase64Str,
@@ -8,9 +8,9 @@ import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper;
import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.ShellType;
import com.reajason.javaweb.memshell.config.BehinderConfig; import com.reajason.javaweb.memshell.config.BehinderConfig;
import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.config.ShellConfig;
import com.reajason.javaweb.memshell.utils.DigestUtils;
import net.bytebuddy.ByteBuddy; import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.dynamic.DynamicType;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.HashMap; import java.util.HashMap;
@@ -4,9 +4,10 @@ import com.reajason.javaweb.ClassBytesShrink;
import com.reajason.javaweb.asm.ClassRenameUtils; import com.reajason.javaweb.asm.ClassRenameUtils;
import com.reajason.javaweb.memshell.config.CustomConfig; import com.reajason.javaweb.memshell.config.CustomConfig;
import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.config.ShellConfig;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.Base64;
/** /**
* @author ReaJason * @author ReaJason
* @since 2025/3/18 * @since 2025/3/18
@@ -28,7 +29,7 @@ public class CustomShellGenerator {
throw new IllegalArgumentException("Custom shell class is empty"); throw new IllegalArgumentException("Custom shell class is empty");
} }
byte[] bytes = ClassRenameUtils.renameClass(Base64.decodeBase64(shellClassBase64), customConfig.getShellClassName()); byte[] bytes = ClassRenameUtils.renameClass(Base64.getDecoder().decode(shellClassBase64), customConfig.getShellClassName());
return ClassBytesShrink.shrink(bytes, shellConfig.isShrink()); return ClassBytesShrink.shrink(bytes, shellConfig.isShrink());
} }
@@ -8,9 +8,9 @@ import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper;
import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.ShellType;
import com.reajason.javaweb.memshell.config.GodzillaConfig; import com.reajason.javaweb.memshell.config.GodzillaConfig;
import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.config.ShellConfig;
import com.reajason.javaweb.memshell.utils.DigestUtils;
import net.bytebuddy.ByteBuddy; import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.dynamic.DynamicType;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.HashMap; import java.util.HashMap;
@@ -14,7 +14,7 @@ import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.dynamic.scaffold.TypeValidation; import net.bytebuddy.dynamic.scaffold.TypeValidation;
import net.bytebuddy.implementation.FixedValue; import net.bytebuddy.implementation.FixedValue;
import net.bytebuddy.pool.TypePool; import net.bytebuddy.pool.TypePool;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
import java.util.*; import java.util.*;
@@ -35,7 +35,7 @@ public class InjectorGenerator {
@SneakyThrows @SneakyThrows
public DynamicType.Builder<?> getBuilder() { public DynamicType.Builder<?> getBuilder() {
String base64String = Base64.encodeBase64String(CommonUtil.gzipCompress(injectorConfig.getShellClassBytes())); String base64String = Base64.getEncoder().encodeToString(CommonUtil.gzipCompress(injectorConfig.getShellClassBytes()));
String originalClassName = injectorConfig.getInjectorClass().getName(); String originalClassName = injectorConfig.getInjectorClass().getName();
String newClassName = injectorConfig.getInjectorClassName(); String newClassName = injectorConfig.getInjectorClassName();
@@ -2,7 +2,7 @@ package com.reajason.javaweb.memshell.packer.base64;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -11,6 +11,6 @@ import org.apache.commons.codec.binary.Base64;
public class DefaultBase64Packer implements Packer { public class DefaultBase64Packer implements Packer {
@Override @Override
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
return Base64.encodeBase64String(generateResult.getInjectorBytes()); return Base64.getEncoder().encodeToString(generateResult.getInjectorBytes());
} }
} }
@@ -4,7 +4,7 @@ import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import com.reajason.javaweb.memshell.utils.CommonUtil; import com.reajason.javaweb.memshell.utils.CommonUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -14,6 +14,6 @@ public class GzipBase64Packer implements Packer {
@Override @Override
@SneakyThrows @SneakyThrows
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
return Base64.encodeBase64String(CommonUtil.gzipCompress(generateResult.getInjectorBytes())); return Base64.getEncoder().encodeToString(CommonUtil.gzipCompress(generateResult.getInjectorBytes()));
} }
} }
@@ -5,7 +5,8 @@ import com.reajason.javaweb.deserialize.Hessian2DeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType; import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import org.apache.commons.codec.binary.Base64;
import java.util.Base64;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +20,6 @@ public class Hessian2XSLTScriptEnginePacker implements Packer {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.XSLTScriptEngine); deserializeConfig.setPayloadType(PayloadType.XSLTScriptEngine);
byte[] generate = Hessian2DeserializeGenerator.generate(injectorBytes, injectorClassName, deserializeConfig); byte[] generate = Hessian2DeserializeGenerator.generate(injectorBytes, injectorClassName, deserializeConfig);
return Base64.encodeBase64String(generate); return Base64.getEncoder().encodeToString(generate);
} }
} }
@@ -5,7 +5,7 @@ import com.reajason.javaweb.deserialize.HessianDeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType; import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +19,6 @@ public class HessianXSLTScriptEnginePacker implements Packer {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.XSLTScriptEngine); deserializeConfig.setPayloadType(PayloadType.XSLTScriptEngine);
byte[] generate = HessianDeserializeGenerator.generate(injectorBytes, injectorClassName, deserializeConfig); byte[] generate = HessianDeserializeGenerator.generate(injectorBytes, injectorClassName, deserializeConfig);
return Base64.encodeBase64String(generate); return Base64.getEncoder().encodeToString(generate);
} }
} }
@@ -6,7 +6,7 @@ import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +19,6 @@ public class CommonsBeanutils110Packer implements Packer {
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils110); deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils110);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig)); return Base64.getEncoder().encodeToString(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
} }
} }
@@ -6,7 +6,7 @@ import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +19,6 @@ public class CommonsBeanutils16Packer implements Packer {
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils16); deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils16);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig)); return Base64.getEncoder().encodeToString(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
} }
} }
@@ -6,7 +6,7 @@ import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +19,6 @@ public class CommonsBeanutils18Packer implements Packer {
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils18); deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils18);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig)); return Base64.getEncoder().encodeToString(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
} }
} }
@@ -6,7 +6,8 @@ import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;
import java.util.Base64;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +20,6 @@ public class CommonsBeanutils19Packer implements Packer {
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils19); deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils19);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig)); return Base64.getEncoder().encodeToString(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
} }
} }
@@ -6,7 +6,7 @@ import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +19,6 @@ public class CommonsCollections3Packer implements Packer {
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsCollections3); deserializeConfig.setPayloadType(PayloadType.CommonsCollections3);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig)); return Base64.getEncoder().encodeToString(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
} }
} }
@@ -6,7 +6,7 @@ import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -19,6 +19,6 @@ public class CommonsCollections4Packer implements Packer {
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig(); DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsCollections4); deserializeConfig.setPayloadType(PayloadType.CommonsCollections4);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig)); return Base64.getEncoder().encodeToString(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
} }
} }
@@ -4,7 +4,7 @@ import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.packer.Packer;
import com.reajason.javaweb.memshell.utils.CommonUtil; import com.reajason.javaweb.memshell.utils.CommonUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
/** /**
* @author ReaJason * @author ReaJason
@@ -17,6 +17,6 @@ public class SpELSpringIOUtilsGzipPacker implements Packer {
@SneakyThrows @SneakyThrows
public String pack(GenerateResult generateResult) { public String pack(GenerateResult generateResult) {
return template.replace("{{className}}", generateResult.getInjectorClassName()) return template.replace("{{className}}", generateResult.getInjectorClassName())
.replace("{{base64Str}}", Base64.encodeBase64String(CommonUtil.gzipCompress(generateResult.getInjectorBytes()))); .replace("{{base64Str}}", Base64.getEncoder().encodeToString(CommonUtil.gzipCompress(generateResult.getInjectorBytes())));
} }
} }
@@ -0,0 +1,30 @@
package com.reajason.javaweb.memshell.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @author ReaJason
* @since 2025/4/6
*/
public class DigestUtils {
public static String md5Hex(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hashBytes = md.digest(input.getBytes());
// Convert byte array to hex string
StringBuilder hexString = new StringBuilder();
for (byte b : hashBytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("MD5 algorithm not found", e);
}
}
}
@@ -49,7 +49,7 @@ class GeneratorMainTest {
if (generateResult != null) { if (generateResult != null) {
Files.write(Paths.get(generateResult.getInjectorClassName() + ".class"), generateResult.getInjectorBytes(), StandardOpenOption.CREATE_NEW); Files.write(Paths.get(generateResult.getInjectorClassName() + ".class"), generateResult.getInjectorBytes(), StandardOpenOption.CREATE_NEW);
Files.write(Paths.get(generateResult.getShellClassName() + ".class"), generateResult.getShellBytes(), StandardOpenOption.CREATE_NEW); Files.write(Paths.get(generateResult.getShellClassName() + ".class"), generateResult.getShellBytes(), StandardOpenOption.CREATE_NEW);
// System.out.println(Base64.encodeBase64String(generateResult.getInjectorBytes())); // System.out.println(Base64.getEncoder().encodeToString(generateResult.getInjectorBytes()));
// System.out.println(Packers.ScriptEngine.getInstance().pack(generateResult)); // System.out.println(Packers.ScriptEngine.getInstance().pack(generateResult));
// Files.write(Path.of("target.jar"), Packer.INSTANCE.AgentJar.getPacker().packBytes(generateResult)); // Files.write(Path.of("target.jar"), Packer.INSTANCE.AgentJar.getPacker().packBytes(generateResult));
} }
@@ -6,7 +6,7 @@ import com.reajason.javaweb.memshell.utils.CommonUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import net.bytebuddy.ByteBuddy; import net.bytebuddy.ByteBuddy;
import net.bytebuddy.jar.asm.ClassReader; import net.bytebuddy.jar.asm.ClassReader;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -24,7 +24,7 @@ class CustomShellGeneratorTest {
.subclass(Object.class) .subclass(Object.class)
.name(CommonUtil.generateShellClassName()).make().getBytes(); .name(CommonUtil.generateShellClassName()).make().getBytes();
String className = CommonUtil.generateShellClassName(); String className = CommonUtil.generateShellClassName();
byte[] bytes1 = new CustomShellGenerator(ShellConfig.builder().build(), CustomConfig.builder().shellClassName(className).shellClassBase64(Base64.encodeBase64String(bytes)).build()).getBytes(); byte[] bytes1 = new CustomShellGenerator(ShellConfig.builder().build(), CustomConfig.builder().shellClassName(className).shellClassBase64(Base64.getEncoder().encodeToString(bytes)).build()).getBytes();
ClassReader classReader = new ClassReader(bytes1); ClassReader classReader = new ClassReader(bytes1);
assertEquals(className, classReader.getClassName().replace("/", ".")); assertEquals(className, classReader.getClassName().replace("/", "."));
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@ import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.base64.GzipBase64Packer; import com.reajason.javaweb.memshell.packer.base64.GzipBase64Packer;
import com.reajason.javaweb.memshell.utils.CommonUtil; import com.reajason.javaweb.memshell.utils.CommonUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -21,6 +21,6 @@ class GzipBase64Test {
GenerateResult generateResult = new GenerateResult(); GenerateResult generateResult = new GenerateResult();
generateResult.setInjectorBytes("hello world".getBytes()); generateResult.setInjectorBytes("hello world".getBytes());
String pack = new GzipBase64Packer().pack(generateResult); String pack = new GzipBase64Packer().pack(generateResult);
assertEquals("hello world", new String(CommonUtil.gzipDecompress(Base64.decodeBase64(pack)))); assertEquals("hello world", new String(CommonUtil.gzipDecompress(Base64.getDecoder().decode(pack))));
} }
} }