public class Example1_5 {
public static void main(String args[])
{
String s="列车时刻表";
char a[]=s.toCharArray();
for(int i=0;i<a.length;i++)
{
a[i]=(char) (a[i]^'t');//这句什么意思 我知道是加密 我想知道怎么加的
}
String secret=new String(a);
System.out.println("密文:"+secret);
for (int i=0;i<a.length;i++)
{
a[i]=(char) (a[i]^'t');//这句什么意思我知道是加密 我想知道怎么加的

}
String code=new String(a);
System.out.println("原文:"+code);


}

解决方案 »

  1.   

    位逻辑运算符
    包括:
    & 与;
    | 或;
    ~ 非(也叫做求反);
    ^ 异或“& 与”、“| 或”、“~ 非”是基本逻辑运算,由此可以演变出“与非”、“或非”、“与或非”复合逻辑运算。“^ 异或”是一种特殊的逻辑运算,对它求反可以得到“同或”,所以“同或”逻辑也叫“异或非”逻辑。例子:
    5&3=1
    0000 0000 0000 0000 0000 0000 0000 0101
    0000 0000 0000 0000 0000 0000 0000 0011
    0000 0000 0000 0000 0000 0000 0000 0001-5&3=1
    1111 1111 1111 1111 1111 1111 1111 1011
    0000 0000 0000 0000 0000 0000 0000 0011
    0000 0000 0000 0000 0000 0000 0000 00115|3=7
    0000 0000 0000 0000 0000 0000 0000 0101
    0000 0000 0000 0000 0000 0000 0000 0011
    0000 0000 0000 0000 0000 0000 0000 0111-5|3=-5
    1111 1111 1111 1111 1111 1111 1111 1011
    0000 0000 0000 0000 0000 0000 0000 0011
    1111 1111 1111 1111 1111 1111 1111 1011~5=-6
    0000 0000 0000 0000 0000 0000 0000 0101
    1111 1111 1111 1111 1111 1111 1111 1010~-5=4
    1111 1111 1111 1111 1111 1111 1111 1011
    0000 0000 0000 0000 0000 0000 0000 01005^3=6
    0000 0000 0000 0000 0000 0000 0000 0101
    0000 0000 0000 0000 0000 0000 0000 0011
    0000 0000 0000 0000 0000 0000 0000 0110-5^3=-8
    1111 1111 1111 1111 1111 1111 1111 1011
    0000 0000 0000 0000 0000 0000 0000 0011
    1111 1111 1111 1111 1111 1111 1111 1000
      

  2.   

    我按8位给你解释,实际上char是16位。
    ^运算的结果就是异则为真。也就是 0和1异或结果才为真,同则为假,0^0,1^1都为假。
    比如:a[i]里放着10110011,你与10111010异或。结果是:
     1 0 1 1 0 0 1 1
    ^1 0 1 1 1 0 1 0
    ----------------
     0 0 0 0 1 0 0 100001001就是加密后的结果。解密的时候,用加密后的结果再异或一次,用10111010,这是加密时用的,必须是这个。
     0 0 0 0 1 0 0 1
    ^1 0 1 1 1 0 1 0
    -----------------
     1 0 1 1 0 0 1 1这不是就还原了吗?