public class test { public String UncryptKey(String ASrc, String AKey) {
String AOut = "";
String dest = "";
int KeyLen = 0, KeyPos = 0, offset = 0;
int SrcPos = 0, SrcAsc = 0, TmpSrcAsc = 0;
if (ASrc.length() == 2)
return AOut; KeyLen = AKey.length();
KeyPos = 0;
offset = Integer.parseInt('$' + ASrc.substring(1, 2));
SrcPos = 3;
do {
SrcAsc = Integer.parseInt('$' + ASrc.substring(SrcPos, 2));
if (KeyPos < KeyLen)
KeyPos = KeyPos + 1;
else
KeyPos = 1;
TmpSrcAsc = SrcAsc ^ AKey.charAt(KeyPos);
if (TmpSrcAsc <= offset)
TmpSrcAsc = 255 + TmpSrcAsc - offset;
else
TmpSrcAsc = TmpSrcAsc - offset;
dest = dest + (char) TmpSrcAsc;
offset = SrcAsc;
SrcPos = SrcPos + 2;
} while (SrcPos < ASrc.length());
AOut = dest;
return AOut;
} public static void main(String[] args) {
}
}
String AOut = "";
String dest = "";
int KeyLen = 0, KeyPos = 0, offset = 0;
int SrcPos = 0, SrcAsc = 0, TmpSrcAsc = 0;
if (ASrc.length() == 2)
return AOut; KeyLen = AKey.length();
KeyPos = 0;
offset = Integer.parseInt('$' + ASrc.substring(1, 2));
SrcPos = 3;
do {
SrcAsc = Integer.parseInt('$' + ASrc.substring(SrcPos, 2));
if (KeyPos < KeyLen)
KeyPos = KeyPos + 1;
else
KeyPos = 1;
TmpSrcAsc = SrcAsc ^ AKey.charAt(KeyPos);
if (TmpSrcAsc <= offset)
TmpSrcAsc = 255 + TmpSrcAsc - offset;
else
TmpSrcAsc = TmpSrcAsc - offset;
dest = dest + (char) TmpSrcAsc;
offset = SrcAsc;
SrcPos = SrcPos + 2;
} while (SrcPos < ASrc.length());
AOut = dest;
return AOut;
} public static void main(String[] args) {
}
}
offset = Integer.parseInt('$' + ASrc.substring(1, 2));java.lang.NumberFormatException: For input string: "$D"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:468)
at java.lang.Integer.parseInt(Integer.java:518)
at Cdmis.UncryptKey(Cdmis.java:113)
at Cdmis.main(Cdmis.java:144)
Exception in thread "main"
Output completed (1 sec consumed) - Normal Termination
这个地方'$'是一个进制标志,具体代表什么不清楚,你把它去掉
将这行改成
offset = Integer.parseInt(ASrc.substring(1, 2),16);
试一试