package thb;public class ceshi1 {
public static void main(String[] args){
char a1='十',a2='点';
char secret='9'; //为什么secret只能取值是(0~9),大于9以后就报错???
a1=(char)(a1^secret);
a2=(char)(a2^secret);
System.out.println("密文:"+a1+a2);//为什么+a1+a2前面一定要有点东西呢???单独的用(+a1+a2)显示的是数字也不报错。
a1=(char)(a1^secret);
a2=(char)(a2^secret);
System.out.println("原文:"+a1+a2);
}}
本人菜鸟一个希望GGJJ给与解答,很是不理解。
public static void main(String[] args){
char a1='十',a2='点';
char secret='9'; //为什么secret只能取值是(0~9),大于9以后就报错???
a1=(char)(a1^secret);
a2=(char)(a2^secret);
System.out.println("密文:"+a1+a2);//为什么+a1+a2前面一定要有点东西呢???单独的用(+a1+a2)显示的是数字也不报错。
a1=(char)(a1^secret);
a2=(char)(a2^secret);
System.out.println("原文:"+a1+a2);
}}
本人菜鸟一个希望GGJJ给与解答,很是不理解。
a2=(char)(a2^secret);
System.out.println("密文:"+a1+a2);//为什么2个代码相同这个显示的是加密的,下面那个是解密的呢
a1=(char)(a1^secret);
a2=(char)(a2^secret);
System.out.println("原文:"+a1+a2);
String plainText = "walykyy(斌斌),walykyy(斌斌)";
// 加密
String crypt = encrypt(plainText, 1233210);
System.out.println(crypt);
// 解密
String plain = encrypt(crypt, 1233210);
System.out.println(plain);
}
private static String encrypt(String plain, int key) {
char[] chars = plain.toCharArray();
char[] crypt = new char[chars.length];
for(int i = 0, k = chars.length; i < k; i++) {
// 随便扰乱一下,为了让相同的字符,出现密文也不同
key ^= key * key + i;
// 这里之所以要强转成char,是因为对于char来说,^计算出来的结果是int
// int 的范围要大于char,所以就要强转(PS:char也是一个数值,对应着
// 一个字符的Unicode值。char占两个字节,从0~65535)。
crypt[i] = (char)(chars[i] ^ key);
}
return new String(crypt);
}
}
如果我们把b作为密钥,把a作为原文,这样就是加密了,如果没有b,那也就不能把密文给还原了;2,两个相同数,异或的结果为0。因为 (a^b)^b = a^(b^b),由于b^b=0,所以 a^(b^b) = a^0 = a不知道这样说你明白了吗?