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

请教这个程序为什么会出现这样的密文?密文是:邐嶟奦嬧

2012-01-03 
请问这个程序为什么会出现这样的密文?密文是:邐嶟奦嬧public class Example3_1{public static void main(S

请问这个程序为什么会出现这样的密文?密文是:邐嶟奦嬧
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);      } 

热点排行