Java程序员能告诉我这个代码段在做什么吗?

Java程序员能告诉我这个代码段在做什么吗?,java,encryption,Java,Encryption,这是用来解密文件的。我试图弄清楚算法,但在理解发生了什么时遇到了一点问题。有什么提示吗?谢谢 localStringBuilder1 = new StringBuilder(""); localStringBuilder2 = new StringBuilder(""); Matcher localMatcher = Pattern.compile("[a-zA-z_\\-]+\\.html").matcher(paramString); //paramStr

这是用来解密文件的。我试图弄清楚算法,但在理解发生了什么时遇到了一点问题。有什么提示吗?谢谢

      localStringBuilder1 = new StringBuilder("");
      localStringBuilder2 = new StringBuilder("");
      Matcher localMatcher = Pattern.compile("[a-zA-z_\\-]+\\.html").matcher(paramString); //paramString is the encrypted file
      localMatcher.find();
      String str2 = localMatcher.group();
for (Integer localInteger1 = Integer.valueOf(0); localInteger1
            .intValue() < str2.length(); localInteger1 = Integer
            .valueOf(1 + localInteger1.intValue())) {
        localStringBuilder2.append(1 + Math.round(str2
                .codePointAt(localInteger1.intValue()) % 3));
        if (localInteger1.intValue() < "fdjkhireuhsdthuirdfg".length())
            localStringBuilder2.append(1 + Math
                    .round("fdjkhireuhsdthuirdfg".codePointAt(localInteger1
                            .intValue()) % 3));
    }
localStringBuilder1=新的StringBuilder(“”);
localStringBuilder2=新的StringBuilder(“”);
Matcher localMatcher=Pattern.compile(“[a-zA-z\\-]+\\\.html”).Matcher(paramString)//paramString是加密文件
localMatcher.find();
字符串str2=localMatcher.group();
对于(整数LocalInteger 1=Integer.valueOf(0);LocalInteger 1
.intValue()
更新:简化循环

for (int i = 0; i < str2.length(); i++) {
        localStringBuilder2.append(1 + Math.round(str2
                .codePointAt(i) % 3));
        if (i < "fdjkhireuhsdthuirdfg".length())
            localStringBuilder2.append(1 + Math
                    .round("fdjkhireuhsdthuirdfg".codePointAt(i) % 3));
    }
for(int i=0;i
你可以在上面找到完整的源代码

编辑 非常感谢Vandey,他解决了产生的字符串:“21321223331121”

然而,这并没有得到完整的答案。 下一部分是(把我打得屁滚尿流):

label249:if(localInteger2.intValue()
我建议设置一个断点,并在代码执行时一步一步地检查代码。观察不同的表达式,并使用这些信息了解代码的作用。这应该比仅仅看代码并试着理解要容易得多。

据我所知,对于str2的每个字符,stringBuilder将为每个循环添加一个两位数的数字,该数字由数字1、2和3组成,这意味着总共有9个这样的数字是可能的。您最终将获得一系列1,2,3…(不按顺序)和每对连续字符,这将建议一组字符,但每个解密字符的标记将随stringbuilder中这对数字的位置而变化


另外,对于stringBuilder中的每对连续数字,只能使用三个2位数字,因为数字的第二位是由“fdjk…”字符串固定的。

str2在这里是硬编码的,请使用它,否则它应该非常接近它。任何人,请随意编辑到正确的方向。添加最后一个打印行只是为了查看它打印的内容。 很抱歉让人误解了变量名

    String str2 = "abcdefg";
    String toCompare = "fdjkhireuhsdthuirdf(g"; //looks like this changed when  you updated your question
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str2.length(); i++) {
        char ch = str2.charAt(i);
        int charInt1 = ch % 3;

        sb.append(1 + Math.round(charInt1));

        if (i < toCompare.length()) {
            char ch2 = toCompare.charAt(i);
            int charInt2 = ch2 % 3;
            sb.append(1 + Math.round(charInt2));
        }
    }
    System.out.println(sb.toString()); // printed 21321223331121 
String str2=“abcdefg”;
String toCompare=“fdjkhireuhsdthuirdf(g);//当您更新您的问题时,这似乎发生了变化
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
iLoch

看看你的类和函数。这个函数只访问局部变量,不返回任何东西(虽然它应该返回一个字符串)


你会从中得到什么?

谢谢你的编辑,忘了格式化!这是一种非常复杂的编写简单循环的方法。正在进行大量的装箱和拆箱操作!我们也缺少str2。看起来它是一个反编译代码。循环会对字符串进行一些置乱或解扰。我添加了一些我略过的变量以前。这不是一个坏主意-只是不确定我是否要安装Eclipse或其他IDE来实现这一点。@Roddy javac不是一个调试器。有jdb,但这对某人来说不是一件好事。iLogic,安装IDE没有什么好担心的。不过,我推荐idea而不是Eclipse。我的理解是,它将变成一个“加密的”(也就是说,基本上只是乱码)将HTML文件转换为实际的HTML文件。我将提交该文件,你们可以在我自己尝试时使用它。正如Victor在下面所述,它实际上可能是一个映射;它可以告诉程序按给定值移动字符。查看源:什么映射???该类没有父类,该函数没有输入或输出。您正在丢弃您的时间是的!就是它了。“21321223331121”.好的,现在我意识到我并没有给你们足够的信息。编辑OP。一旦我获得足够的代表,我将对此进行投票。:/再次感谢。删除括号产生了结果。对于任何感兴趣的人:此字符串是使用文件名生成的。即,上面示例中的str2将是“index.html”从那里开始,字符按顺序一次又一次地匹配,直到html文件一直被读取-bam,解码。
    String str2 = "abcdefg";
    String toCompare = "fdjkhireuhsdthuirdf(g"; //looks like this changed when  you updated your question
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str2.length(); i++) {
        char ch = str2.charAt(i);
        int charInt1 = ch % 3;

        sb.append(1 + Math.round(charInt1));

        if (i < toCompare.length()) {
            char ch2 = toCompare.charAt(i);
            int charInt2 = ch2 % 3;
            sb.append(1 + Math.round(charInt2));
        }
    }
    System.out.println(sb.toString()); // printed 21321223331121