Java实现的文本加密工具

83 阅读8分钟

文本加密代码: 自动加密字符串,并输出加密后的代码。 (gitee.com)

用于代码混淆

源码

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Random;

// Press ⇧ twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {

    public static int maxRandomLines1 = 10;
    public static int maxRandomLines2 = 10;
    public static int maxRandomLines3 = 20;

    public static void main(String[] args) {
        while (true) {
            if (!extracted()) {
                break;
            }
        }
    }

    private static boolean extracted() {
        String string = "";
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("\nWhat's your string?  ");
        try {
            string = br.readLine();
            if (string.equals("exit()")) {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        int pad = new Random().nextInt(1000);

        int padArgus = 0xFFFF;
        int[] ints = new int[string.length()];

        for (int i = 0; i < string.length(); i++) {
            char a = string.charAt(i);
            int b = ~((int) a ^ padArgus) - pad;
            ints[i] = b;
        }

        StringBuilder s = new StringBuilder();
        for (int anInt : ints) {
            int a = anInt;
            a += pad;
            s.append((char) (a & padArgus));
        }
        System.out.println("测试加密解密成功:" + s);
        System.out.println("开始生成代码:\n");

        StringBuilder sb = new StringBuilder();

        String random2hidePadArgusName = getRandomString();
        String random2hidePadArgusSubName = getRandomString();
        String padArgusName = getRandomString();
        String argsArrayName = getRandomString();
        String intsArrayName = getRandomString();
        String resultStringName = getRandomString();
        String indexStringName = getRandomString();
        String itemStringName = getRandomString();
        String zeroStrName = getRandomString();
        String zeroIndexName = getRandomString();
        String oneIndexName = getRandomString();
        String oneRealIndexName = getRandomString();
        String twoIndexName = getRandomString();
        String twoRealIndexName = getRandomString();
        String zeroRealIndexName = getRandomString();

        int random2hidePadArgus = new Random().nextInt(padArgus);
        sb.append("int ").append(random2hidePadArgusName).append(" = ").append(random2hidePadArgus).append(";");
        sb.append("\n");
        sb.append("int ").append(random2hidePadArgusSubName).append(" = ").append(padArgus - random2hidePadArgus).append(";");
        sb.append("\n");
        sb.append("int ").append(padArgusName).append(" = ").append(random2hidePadArgusName).append(" + ").append(random2hidePadArgusSubName).append(";");
        sb.append("\n");

        // 0
        String leftZeroStr = getRandomString();
        int zeroIndex = leftZeroStr.length();
        String zeroStr = leftZeroStr + "0" + getRandomString();
//        Integer.parseInt(String.valueOf(zeroStr.charAt(zeroIndex)));

        sb.append("int ").append(zeroIndexName).append(" = ").append(zeroIndex).append(";");
        sb.append("\n");

        // 1
        int oneIndex = zeroStr.length();
        zeroStr = zeroStr + "1" + getRandomString();
        sb.append("int ").append(oneIndexName).append(" = ").append(oneIndex).append(";");
        sb.append("\n");
        // 2
        int twoIndex = zeroStr.length();
        zeroStr = zeroStr + "2" + getRandomString();
        sb.append("int ").append(twoIndexName).append(" = ").append(twoIndex).append(";");
        sb.append("\n");

        sb.append("String ").append(zeroStrName).append(" = \"").append(zeroStr).append("\";");
        sb.append("\n");
        sb.append("int ").append(zeroRealIndexName).append(" = ").append("Integer.parseInt(String.valueOf(").append(zeroStrName).append(".charAt(").append(zeroIndexName).append(")));");
        sb.append("\n");
        sb.append("int ").append(oneRealIndexName).append(" = ").append("Integer.parseInt(String.valueOf(").append(zeroStrName).append(".charAt(").append(oneIndexName).append(")));");
        sb.append("\n");
        sb.append("int ").append(twoRealIndexName).append(" = ").append("Integer.parseInt(String.valueOf(").append(zeroStrName).append(".charAt(").append(twoIndexName).append(")));");
        sb.append("\n");

        sb.append("int ").append(argsArrayName).append("[] = ").append("{").append(pad).append(",").append(padArgusName).append(",").append(zeroRealIndexName);
        for (int i = 0; i < new Random().nextInt(maxRandomLines1); i++) {
            sb.append(",").append(new Random().nextInt(Integer.MAX_VALUE));
        }
        sb.append("};");
        sb.append("\n");

        sb.append("int ").append(intsArrayName).append("[] = ").append("{");
        for (int i = 0; i < ints.length; i++) {
//            sb.append("0x").append(Integer.toHexString(ints[i]));
            sb.append(ints[i]);
            if (i < ints.length - 1) {
                sb.append(", ");
            }
        }
        sb.append("};");
        sb.append("\n");

        sb.append("String ").append(resultStringName).append(" = \"\";");
        sb.append("\n");
        int lineRandom = new Random().nextInt(4);
        sb.append("for (int ").append(indexStringName).append(" = ").append(argsArrayName).append("[").append(twoRealIndexName).append("]").append("; ").append(indexStringName).append(" < ").append(intsArrayName).append(".length; ").append(indexStringName).append("++) {");
        sb.append("\n");
        if (lineRandom == 0) {
            sb.append(getRandomCode());
        }
        sb.append("    ").append("int ").append(itemStringName).append(" = ").append(intsArrayName).append("[").append(indexStringName).append("];");
        sb.append("\n");
        if (lineRandom == 1) {
            sb.append(getRandomCode());
        }
        sb.append("    ").append(itemStringName).append(" += ").append(argsArrayName).append("[").append(zeroRealIndexName).append("]").append(";");
        sb.append("\n");
        if (lineRandom == 2) {
            sb.append(getRandomCode());
        }
        sb.append("    ").append(resultStringName).append(" += ").append("(char)(").append(itemStringName).append(" & ").append(argsArrayName).append("[").append(oneRealIndexName).append("]").append(");");
        sb.append("\n");
        if (lineRandom == 3) {
            sb.append(getRandomCode());
        }
        sb.append("}");
        sb.append("\n");
        sb.append("//==>").append(string).append("<==");
        sb.append("\n");
        sb.append("String resultString = ").append(resultStringName).append(";");
        sb.append("\n");
        System.out.println(sb);

        StringSelection stringSelection = new StringSelection(sb.toString());
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(stringSelection, null);
        System.out.println("===========内容已复制到剪切板===========");
        System.out.println("==>"+ string +"<==");
        return true;
    }

    public static StringBuilder getRandomCode() {
        StringBuilder sb = new StringBuilder();
        String str1Name = getRandomString();
        String str2Name = getRandomString();
        String str3Name = getRandomString();
        String str4Name = getRandomString();
        sb.append("\n");
        String str1Value = getRandomString();
        sb.append("    String ").append(str1Name).append(" = \"").append(str1Value).append("\";");
        sb.append("\n");
        String str2Value = getRandomString();
        sb.append("    String ").append(str2Name).append(" = \"").append(str2Value).append("\";");
        sb.append("\n");
        sb.append("    String ").append(str3Name).append(" = ").append(str1Name).append(" + ").append(str2Name).append(";");
        sb.append("\n");
        sb.append("    String ").append(str4Name).append(" = \"\"").append(";");
        sb.append("\n");
        int r = new Random().nextInt(maxRandomLines2);
        for (int i = 0; i < r; i++) {
            String randomStrName = getRandomString();
            String randomStr = getRandomString();
            sb.append("    String ").append(randomStrName).append(" = \"").append(randomStr).append("\";");
            sb.append("\n");

            int randomIndex = new Random().nextInt(randomStr.length());
            sb.append("    ").append(str4Name).append(" = ").append(str4Name).append(" + ").append(randomStrName).append(".charAt(").append(randomIndex).append(");");
            sb.append("\n");
        }

        int strLength = (str1Value + str2Value).length() + r;

        sb.append("    if((").append(str3Name).append(" + ").append(str4Name).append(").length() > ").append(strLength).append("){");
        sb.append("\n");

        int rr = new Random().nextInt(maxRandomLines3);

        String cacheName = str4Name;

        for (int i = 0; i < rr; i++) {
            //int
            //long
            //boolean
            //String
            //double
            //float
            String lastRandomName = getRandomString();
            String type = "int";
            String typeValueOf = "Integer.valueOf";
            int typeRandom = new Random().nextInt(5);
            int subRandom = new Random().nextInt(8);
            String sub = "+"; // + - * / & ^ |
            if (typeRandom == 1) {
                type = "long";
                typeValueOf = "Long.valueOf";
            } else if (typeRandom == 2) {
                type = "int";
                typeValueOf = "Integer.valueOf";
            } else if (typeRandom == 3) {
                type = "double";
                typeValueOf = "Double.valueOf";
            } else if (typeRandom == 4) {
                type = "float";
                typeValueOf = "Float.valueOf";
            }

            if (subRandom == 1) {
                sub = "-"; // + - * / & ^ |
            } else if (subRandom == 2) {
                sub = "*"; // + - * / & ^ |
            } else if (subRandom == 3) {
                sub = "/"; // + - * / & ^ |
            } else if (subRandom == 4) {
                sub = "&"; // + - * / & ^ |
            } else if (subRandom == 5) {
                sub = "^"; // + - * / & ^ |
            } else if (subRandom == 6) {
                sub = "|"; // + - * / & ^ |
            } else if (subRandom == 7) {
                sub = "%"; // + - * / & ^ |
            }
            sb.append("        ").append(type).append(" ").append(lastRandomName).append(" = ")
                    .append(typeValueOf).append("(")
                    .append("((Integer.valueOf(String.valueOf(").append(cacheName).append(")))").append(sub)
                    .append(new Random().nextInt(Integer.MAX_VALUE))
                    .append(") + \"\")").append(";");
            cacheName = lastRandomName;
            sb.append("\n");


        }

        int fssdfe = new Random().nextInt(2);
        if (fssdfe == 0) {

            sb.append("        ").append("try {");
            sb.append("\n");
            sb.append("        ").append("    throw new java.lang.Throwable(String.valueOf(").append(cacheName).append("));");
            sb.append("\n");
            sb.append("        ").append("} catch (java.lang.Throwable e) {");
            sb.append("\n");
            sb.append("        ").append("    throw new java.lang.RuntimeException(e);");
            sb.append("\n");
            sb.append("        }");
        } else {
            sb.append("        android.util.Log.d(\"").append(getRandom15String()).append("\", String.valueOf(").append(cacheName).append("));");
        }
        sb.append("\n");
        sb.append("    }");
        sb.append("\n");

        return sb;
    }

    public static String getRandomString() {
        int length = new Random().nextInt(50);
        while (length < 5) {
            length = new Random().nextInt(50);
        }
        String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        sb.append(chars.charAt(random.nextInt(chars.length() - 10)));
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(chars.length());
            char c = chars.charAt(index);
            sb.append(c);
        }
        return sb.toString();
    }
    public static String getRandom15String() {
        int length = new Random().nextInt(15);
        ;
        String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        sb.append(chars.charAt(random.nextInt(chars.length() - 10)));
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(chars.length());
            char c = chars.charAt(index);
            sb.append(c);
        }
        return sb.toString();
    }
}

示例

What's your string?  i love u
测试加密解密成功:i love u
开始生成代码:


int WmiaAkH1d5P91bF = 15764;
int PEpoJkbxYKce6xt1A6e4xqSrlsvs59 = 49771;
int YxrcBMqb9QzcSz6sdtrdYq2s4WMczRXU8Jyhovz3B3AZZ2b = WmiaAkH1d5P91bF + PEpoJkbxYKce6xt1A6e4xqSrlsvs59;
int Df3l8Dx0PvQO2wMxrXKLzEos2L = 26;
int GeR502SG4acXruXrOjWd4CvL3cfpAT0K = 33;
int UBV2DC3Q = 57;
String epPUoOOvXUuRRGj0CH4fSTM5fWKUWup7Ly = "vsebYiXOS7BTCO9SBbDtnh8rm40i97Mmp1UUvwDLaH1xmM7oddKuauOgx2Q8WDi8JF7ND89ple2qJJ83eieqwtF30Gd9HUD5QFzeX";
int lbe7Wchxoa5XtHFHcgXPnQqMpHYmex = Integer.parseInt(String.valueOf(epPUoOOvXUuRRGj0CH4fSTM5fWKUWup7Ly.charAt(Df3l8Dx0PvQO2wMxrXKLzEos2L)));
int nfevHPJXA = Integer.parseInt(String.valueOf(epPUoOOvXUuRRGj0CH4fSTM5fWKUWup7Ly.charAt(GeR502SG4acXruXrOjWd4CvL3cfpAT0K)));
int LUc9nUOIOBwB3pOcQM07kwZZYNJCJGT7S = Integer.parseInt(String.valueOf(epPUoOOvXUuRRGj0CH4fSTM5fWKUWup7Ly.charAt(UBV2DC3Q)));
int d3tFMFEhpJlqOXde2QfJYMNQ3n7b[] = {449,YxrcBMqb9QzcSz6sdtrdYq2s4WMczRXU8Jyhovz3B3AZZ2b,lbe7Wchxoa5XtHFHcgXPnQqMpHYmex,2100087375,2124685221,23132457,1246317408};
int yMZWxH86mxwH[] = {-65880, -65953, -65877, -65874, -65867, -65884, -65953, -65868};
String aB022jYLYS = "";
for (int IIhiWZ8KBDN2qFcdRBDnDYxeoIKXF65kiI9jSo = d3tFMFEhpJlqOXde2QfJYMNQ3n7b[LUc9nUOIOBwB3pOcQM07kwZZYNJCJGT7S]; IIhiWZ8KBDN2qFcdRBDnDYxeoIKXF65kiI9jSo < yMZWxH86mxwH.length; IIhiWZ8KBDN2qFcdRBDnDYxeoIKXF65kiI9jSo++) {
    int rVXlJNKGw6m3KRwCYDZm = yMZWxH86mxwH[IIhiWZ8KBDN2qFcdRBDnDYxeoIKXF65kiI9jSo];
    rVXlJNKGw6m3KRwCYDZm += d3tFMFEhpJlqOXde2QfJYMNQ3n7b[lbe7Wchxoa5XtHFHcgXPnQqMpHYmex];
    aB022jYLYS += (char)(rVXlJNKGw6m3KRwCYDZm & d3tFMFEhpJlqOXde2QfJYMNQ3n7b[nfevHPJXA]);

    String MUOnJGg0Xm7yO9oVctwRZQqlgnTs1TQybPi1LDW = "UvxYhzZjJ5Yz9Y3NJdma8jCZS0MLtjw9M2";
    String Z5MsQyf4849SowjgxkWpO7 = "BWiV5dYHUcH0wC05KDCCspUgEjthShG6moawG8xknNw";
    String TvgmP5Jwt3yEcszjlHfp32p1x5LYdz8AIaBO0aR1fcrg = MUOnJGg0Xm7yO9oVctwRZQqlgnTs1TQybPi1LDW + Z5MsQyf4849SowjgxkWpO7;
    String ni16LBnkvf6WmU9dEpTn0 = "";
    String yQgHOy7QHvNPIHl = "ppoIJhXBAFdI";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + yQgHOy7QHvNPIHl.charAt(7);
    String pgKlQOAP75bu9aUvaK3KISQcLGtRnYl7npyg = "n6O3Ez8TjYHtqFMAgFM6hyvuZ0vcyNO5IO6WZwYNdaVpG";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + pgKlQOAP75bu9aUvaK3KISQcLGtRnYl7npyg.charAt(23);
    String Tmqp5vCkcNIft1hflTxULV5yOBEKIa8soiy0uR3f9M = "mpt12MzeE9B0j";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + Tmqp5vCkcNIft1hflTxULV5yOBEKIa8soiy0uR3f9M.charAt(4);
    String oJskcV3L2FMTWmpIX84PhDUtVLr2FElkXmogqZdl9RzZ19sd9E = "RZkShYgo3Vfxp9416aksJZmo";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + oJskcV3L2FMTWmpIX84PhDUtVLr2FElkXmogqZdl9RzZ19sd9E.charAt(16);
    String ONL7ZsAMTsYd = "eCcEzfLVw9Cm4mPL";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + ONL7ZsAMTsYd.charAt(9);
    String CPF0YAAaBAbZLWQuP4KkdgUiEmhuy3nKvM43 = "yMfm3BIZuhFnwf7zpAbhjvlZicUo";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + CPF0YAAaBAbZLWQuP4KkdgUiEmhuy3nKvM43.charAt(6);
    String nvQil6qdqkAByaYfa = "KabRvh6wzg06ckDDA3XEK3wT2NqBd";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + nvQil6qdqkAByaYfa.charAt(10);
    String LfgRGFJ9UAGQQylC47QXed24OL6wUwJEdIfKX9f9qGe6 = "DbbZuRVFBalzbIpSc4JdZVHee1XswHZfKA7afGI";
    ni16LBnkvf6WmU9dEpTn0 = ni16LBnkvf6WmU9dEpTn0 + LfgRGFJ9UAGQQylC47QXed24OL6wUwJEdIfKX9f9qGe6.charAt(7);
    if((TvgmP5Jwt3yEcszjlHfp32p1x5LYdz8AIaBO0aR1fcrg + ni16LBnkvf6WmU9dEpTn0).length() > 85){
        float yNu3zCvyiLGvXSlIYZJviPqzRuV5Vn8mScDrwwZz6AFU = Float.valueOf(((Integer.valueOf(String.valueOf(ni16LBnkvf6WmU9dEpTn0)))|373488066) + "");
        int DceizLP0L8ZuCEhQbfC665rnsz9 = Integer.valueOf(((Integer.valueOf(String.valueOf(yNu3zCvyiLGvXSlIYZJviPqzRuV5Vn8mScDrwwZz6AFU)))^1562877622) + "");
        float QTn1rEWI1MBmM = Float.valueOf(((Integer.valueOf(String.valueOf(DceizLP0L8ZuCEhQbfC665rnsz9)))|1240982802) + "");
        int uP7iU9MpoIbYQXzVPYihc5SAT89uPh8T9O = Integer.valueOf(((Integer.valueOf(String.valueOf(QTn1rEWI1MBmM)))%497872307) + "");
        long hY5FdvpgCUU0EBbTQymLBdW8IDqwl = Long.valueOf(((Integer.valueOf(String.valueOf(uP7iU9MpoIbYQXzVPYihc5SAT89uPh8T9O)))/1297289484) + "");
        double TTHFlxsNKsEiHD9ivdtWjJTqixvrsO8w9GllmaOET = Double.valueOf(((Integer.valueOf(String.valueOf(hY5FdvpgCUU0EBbTQymLBdW8IDqwl)))&2048367817) + "");
        float RIU6i5qLoHTFaANphv7nx6WFoidmVqMDy = Float.valueOf(((Integer.valueOf(String.valueOf(TTHFlxsNKsEiHD9ivdtWjJTqixvrsO8w9GllmaOET)))/1424461630) + "");
        double K0ItmriOmiEqpOje2hHxU7y3sWxs1cMVpDW8 = Double.valueOf(((Integer.valueOf(String.valueOf(RIU6i5qLoHTFaANphv7nx6WFoidmVqMDy)))+2147169199) + "");
        long pY1lZi8NGp4r04QWAE27GvpgBN36jRxUb4MKzh = Long.valueOf(((Integer.valueOf(String.valueOf(K0ItmriOmiEqpOje2hHxU7y3sWxs1cMVpDW8)))*528963119) + "");
        int RMnvoDIkuwb9a7OxGfNUZyKuJSr = Integer.valueOf(((Integer.valueOf(String.valueOf(pY1lZi8NGp4r04QWAE27GvpgBN36jRxUb4MKzh)))^218055810) + "");
        long tWFpNlQAdOW = Long.valueOf(((Integer.valueOf(String.valueOf(RMnvoDIkuwb9a7OxGfNUZyKuJSr)))^1127795483) + "");
        long Y6lAr6OWXGhnTjGemBhdomoZQw3a = Long.valueOf(((Integer.valueOf(String.valueOf(tWFpNlQAdOW)))/2137947991) + "");
        double S24vLWHdzKyA6QGDyrxBbwsnJ0BawRe = Double.valueOf(((Integer.valueOf(String.valueOf(Y6lAr6OWXGhnTjGemBhdomoZQw3a)))^155624542) + "");
        long AVvnGOr6nZqc61 = Long.valueOf(((Integer.valueOf(String.valueOf(S24vLWHdzKyA6QGDyrxBbwsnJ0BawRe)))-910624300) + "");
        try {
            throw new java.lang.Throwable(String.valueOf(AVvnGOr6nZqc61));
        } catch (java.lang.Throwable e) {
            throw new java.lang.RuntimeException(e);
        }
    }
}
//==>i love u<==
String resultString = aB022jYLYS;



===========内容已复制到剪切板===========
==>i love u<==