【Java入门100例】15.明文加密——异或运算

1,982 阅读1分钟

这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

题目描述

难度:简单

使用异或对字符进行加密和解密。

如对“十点进攻”进行加密。

密码本为secret='8'

加密方式:异或

知识点

  • 位运算

解题思路

Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。

拿左移举个例子,讲解计算过程。


public class Test {
	public static void main(String[] args) {
		System.out.println(5<<2);//运行结果是20
	}
}
// 输出 20

程序是怎样执行的呢? 首先会将5转为2进制表示形式(java中,整数默认就是int类型,也就是32位):

0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0:

0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20

再演示一下题目中的异或:

位异或:第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0

public class Test {
	public static void main(String[] args) {
		System.out.println(5 ^ 3);
	}
}
//输出 6

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011


6转换为二进制:0000 0000 0000 0000 0000 0000 0000 0110

代码实现

/**
 * 使用异或对字符进行加密和解密
 */
public class question_15 {
    public static void main(String args[]){
        char a1='十',a2='点',a3='进',a4='攻';
        char secret='8';
        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

想进大厂

想拿高薪

想有一群志同道合的伙伴

请加入点击我的主页