JustryDeng 4 anni fa
parent
commit
116891ec14

+ 5 - 3
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/executor/DecryptExecutor.java

@@ -257,6 +257,7 @@ public class DecryptExecutor {
         final File zipFile = new File(zipFilePath);
         byte[] nonClassFileChecklistBytes = IOUtil.readFileFromWorkbenchRoot(zipFile, Constant.ALREADY_ENCRYPTED_NON_CLASS_FILE_CHECKLIST_SAVE_FILE);
         String nonClassFileChecklist = new String(nonClassFileChecklistBytes, StandardCharsets.UTF_8);
+        Logger.debug(DecryptExecutor.class, "nonClassFileChecklist -> " + nonClassFileChecklist);
         if (StrUtil.isBlank(nonClassFileChecklist)) {
             Logger.debug(DecryptExecutor.class, "nonClassFileChecklist is empty.");
             return new HashMap<>(1);
@@ -268,13 +269,14 @@ public class DecryptExecutor {
         Map<String, byte[]> replaceMap = new HashMap<>(16);
         for (String zipEntryName : needToDecryptNonClassFileSet) {
             byte[] encryptedBytes = IOUtil.readFileFromWorkbenchRoot(zipFile, Constant.DEFAULT_ENCRYPTED_NON_CLASSES_SAVE_DIR + zipEntryName);
-            byte[] bytes = EncryptUtil.decrypt(encryptedBytes, userIfInputPwdWhileDecrypt ? password :
-                    obtainAutoGeneratedPwdWhileEncrypt(zipFilePath, Constant.DEFAULT_ENCRYPTED_BASE_SAVE_DIR));
             // 只处理有印章的
-            if (DecryptExecutor.verifySeal(bytes)) {
+            if (DecryptExecutor.verifySeal(encryptedBytes)) {
+                byte[] bytes = EncryptUtil.decrypt(encryptedBytes, userIfInputPwdWhileDecrypt ? password :
+                        obtainAutoGeneratedPwdWhileEncrypt(zipFilePath, Constant.DEFAULT_ENCRYPTED_BASE_SAVE_DIR));
                 replaceMap.put(zipEntryName, bytes);
             }
         }
+        Logger.debug(DecryptExecutor.class, "un-mask non-classes contains -> " + replaceMap.keySet());
         return JarUtil.rewriteZipEntry(new ZipFile(zipFilePath), replaceMap);
     }
     

+ 3 - 8
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/Constant.java

@@ -22,7 +22,7 @@ public interface Constant {
     /**
      * 印章, 若class中存在此印章内容,也能说明该class被class-winter加密过
      */
-    String SEAL = "At " + LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME) + "\t" + "Random-Character " + new String(EncryptUtil.generateCharArr(32));
+    String SEAL = "At " + LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME).replace("T"," ") + "\t" + "Random-Character " + new String(EncryptUtil.generateCharArr(32));
     
     /**
      * 默认需要加密的xml一级节点名称
@@ -57,17 +57,12 @@ public interface Constant {
     /**
      * 默认的class-winter加密classes相关信息的存储目录
      */
-    String DEFAULT_ENCRYPTED_CLASSES_SAVE_DIR = "META-INF/winter/classes";
+    String DEFAULT_ENCRYPTED_CLASSES_SAVE_DIR = "META-INF/winter/classes/";
     
     /**
      * 默认的class-winter加密其它文件(如.yml .yaml .xml .properties)相关信息的存储目录
      */
-    String DEFAULT_ENCRYPTED_NON_CLASSES_SAVE_DIR = "META-INF/winter/NON-classes";
-    
-    /**
-     * MANIFEST.MF文件的位置
-     */
-    String MANIFEST_FILE = "META-INF/MANIFEST.MF";
+    String DEFAULT_ENCRYPTED_NON_CLASSES_SAVE_DIR = "META-INF/winter/non-classes/";
     
     /**
      * 记录已加密.class的全类名的清单文件

+ 1 - 1
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/JavassistUtil.java

@@ -80,7 +80,7 @@ public final class JavassistUtil {
                         ctMethod.insertBefore(
                                 "System.out.println(\"\\n " + Constant.TIPS +" \\n\");"
                                 // 也输出印章信息吧
-                                + "\nSystem.out.println(\"" + Constant.SEAL +"\");"
+                                + "\nSystem.out.println(\" " + Constant.SEAL +" \");"
                                 + "\nSystem.exit(-1);"
                         );
                     } catch (CannotCompileException e) {