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