读书人

请教这个程序为什么会出现这样的密文?

发布时间: 2012-01-03 22:16:06 作者: rapoo

请问这个程序为什么会出现这样的密文?密文是:
public class Example3_1{
public static void main(String args[]){
char a1='郑',a2='州',a3='大',a4='学';
char secret='A';
a1=(char)(a1^secret);
a2=(char)(a2^secret);
a3=(char)(a3^secret);
a4=(char)(a4^secret);
System.out.println("密文:"+a1+a2+a3+a4);
a1=(char)(a1^secret);
a2=(char)(a2^secret);
a3=(char)(a3^secret);
a4=(char)(a4^secret);
System.out.println("原文:"+a1+a2+a3+a4);
}
}

[解决办法]

Java code
public class Example3_1{    public static void main(String args[]){            char a1='郑',a2='州',a3='大',a4='学';//16个二进制位    char secret='A';//16个二进制位    String string = "A郑州大学";    for(int i=0; i<string.length(); i++)//求字符的uincode代号    System.out.println( string.charAt(i)+"= " + Integer.toBinaryString((int)string.charAt(i)));        /*高位的0没有显示出来    A= 1000001    郑= 1001000011010001    州= 101110111011110    大= 101100100100111    学= 101101101100110    = 1001000010010000    = 101110110011111    = 101100101100110    = 101101100100111    */        //补齐到32个二进制位,对应位异或  相同为0不同为1  比如 郑^A =1001000011010001^1000001= 1001000010010000 =      a1=(char)(a1^secret);//自动转化为32个二进制位后再异或(高16位补0) 然后强制转为16个二进制位,(高16位去掉)    a2=(char)(a2^secret);    a3=(char)(a3^secret);    a4=(char)(a4^secret);    System.out.println("密文:"+a1+a2+a3+a4);  //再次补齐到32个二进制位,对应位异或  相同为0不同为1  比如^A =1001000010010000 ^ 1000001=  1001000011010001 = 郑     a1=(char)(a1^secret);          a2=(char)(a2^secret);    a3=(char)(a3^secret);    a4=(char)(a4^secret);    System.out.println("原文:"+a1+a2+a3+a4);      } 

读书人网 >Java相关

热点推荐