日期:2014-05-20 浏览次数:20845 次
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);
}