首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个关于Java字符转换有关问题

2013-08-29 
一个关于Java字符转换问题public static void main(String[] args) {// TODO Auto-generated method stubS

一个关于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 };


// int XorKey[] = {178, 9, 170, 85, 147, 109, 132, 71};
int a = s.length();
int j = 0;

for (int i = 0; i < a; i += 2) {
int x = getIntFromChar(s.charAt(i));
int y = getIntFromChar(s.charAt(i + 1));

if (x < 0 
[解决办法]
 y < 0) {
System.out.println("数据有误!");
break;
}
int z = (x << 4) + y;// 相当于x*16 + y.
int z1 = z ^ XorKey[j];
str += z1;//以10进制形式表示。
//str += Integer.toHexString(z1);//16进制表示
j = (j + 1) % 8;
}
System.out.println(str);
}

/**
 * 把16进制表示的字符,换成整数。'A'('a') --> 10, 'F'('f')--> 15.
 * '0'-->0,'1'-->1  ......
 * @param a
 * @return
 */
public static int getIntFromChar(char a) {
int result = 0;
if (a >= 'A' && a <= 'F') {
result = a - 'A' + 10;
} else if (a >= 'a' && a <= 'f') {
result = a - 'a' + 10;
} else if (a >= '0' && a <= '9') {
result = a - '0';
} else {
System.out.println("给定值 a 不合法!");
result = -1;
}
return result;
}
}

热点排行