日期:2014-05-20  浏览次数:20608 次

一个关于Java字符转换问题
public static void main(String[] args) {
// TODO Auto-generated method stub
        String s="F648E81AB0"; 
        String str="";
      
       int XorKey[] = {0xB2, 0x09, 0xAA, 0x55, 0x93, 0x6D, 0x84, 0x47};
      //  int XorKey[] = {178, 9, 170, 85, 147, 109, 132, 71};
        int a=(s.length())/2;
        int j=0;
         
       for(int i=1;i<=a;i++){
           str = str + s.charAt( Integer.parseInt("0x"+s.substring(i * 2 - 2,2),16) ^ XorKey[j]);

           j = (j + 1) % 8;
           
        }
        System.out.println(str);
}


我自己写的一个解密的方法、把字符串S的值解密出来,但是一直过不去、试了很多种很方法、都没办法。
大概原理就是把字符串循环一个一个解密,首先取2字符的16进制对应的10进制值异或获得另外一个值的10进制之后取对应值的ASCII码、最后解密出来。。对JAVA了解尚且、求大神解答,感谢

------解决方案--------------------
str = str + s.charAt( Integer.parseInt("0x"+s.substring(i * 2 - 2,2),16) ^ XorKey[j]);

这个好像应该改成这样,不知道对不对
str = str + s.charAt( Integer.parseInt(s.substring(i * 2 - 2,2),16) ^ XorKey[j]);

不过这样还是有错,s.charAt(index)的下标越界了,
------解决方案--------------------
这样试试看:

public class Jiami {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "F648E81AB0";
String str = "";

int XorKey[] = { 0xB2, 0x09, 0xAA, 0x55, 0x93, 0x6D, 0x84, 0x47 };