这应该解密一个文件。我正在试图找出算法,但我正在理解正在发生的事情。任何提示?谢谢!
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));
}
更新:简化循环
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));
}
您可以在here
上找到完整的源代码修改 的 非常感谢Vandey解决了所产生的字符串:“21321223331121”
然而,这并没有得到完整答案。 接下来的部分是(打败了我):
label249: if (localInteger2.intValue() < i);
try
{
localStringBuilder1.append((char)(Integer.parseInt(str1.substring(0 + localInteger2.intValue(), 2 + localInteger2.intValue()), 16) - Integer.parseInt(localStringBuilder2.substring(localInteger2.intValue() / 2 % localStringBuilder2.length(), 1 + localInteger2.intValue() / 2 % localStringBuilder2.length()))));
label327: localInteger2 = Integer.valueOf(2 + localInteger2.intValue());
break label249;
str3 = localStringBuilder1.toString();
}
catch (StringIndexOutOfBoundsException localStringIndexOutOfBoundsException)
{
break label327;
}
答案 0 :(得分:0)
我建议设置一个断点,并在执行时逐步完成代码。观察不同的表达式并使用此信息代码的作用。这应该比查看代码并尝试理解要容易得多。
答案 1 :(得分:0)
据我所知,对于str2的每个字符,stringBuilder将为每个循环附加一个两位数字,该数字由数字1,2和3组成,这意味着总共9个这样的数字数字是可能的。你最终会得到一系列的1,2,3 ......(不是按顺序)和每对连续的字符,会建议一组字符,但每个解密字符的标记会随着这对字符的位置而变化。 stringbuilder中的数字。
此外,对于stringBuilder中的每个连续数字对,只有三个2位数字是可能的,因为数字的第二位由“fdjk ...”字符串固定。
答案 2 :(得分:0)
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
答案 3 :(得分:0)
iLoch,
看看你的课程和功能。此函数仅访问局部变量,它不返回任何内容(虽然它应返回一个字符串)。
你将从中获得什么?