异或加密法 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。 解密的方法就是再执行一次同样的操作。

/*	异或加密法
 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
 解密的方法就是再执行一次同样的操作。
 加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。
 下面的代码演示了如何实现该功能。


 请仔细阅读,填写空缺的代码(下划线部分)。
 注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
 直接写在题面中不能得分。
 */
public class 异或加密法 {
	public static void print(char[] p){
		for(char x:p){
			System.out.printf("%s", x);
		}
		System.out.println();
	}
	public static void f(char[] buf, char[] uckey, int n) {
		int i;
		for (i = 0; i < n; i++)
			buf[i] = (char) (buf[i] ^ uckey[i]);
	}

	public static void main(String[] args) {
		char p[] = "abcd中国人123".toCharArray(); // 待加密串
		char[] key = "11001100010001110".toCharArray(); // 以串的形式表达的密匙,运算时要转换为按位存储的形式。
		int np = p.length;
		int nk = key.length;
		char[] uckey = new char[np];

		// 密匙串需要按位的形式循环拼入 uckey中
		int i;
		for (i = 0; i < np * 8; i++) {
			if (key[i % nk] == '1')
				uckey[i/8] |= (char)0x80 >> (i%8); // 填空1
			else
				uckey[i/8] &= ~(char)0x80 >> (i%8); // 填空2
		}
		f(p, uckey, p.length);
		print(p);
		f(p, uckey, p.length);
		print(p);
	}
}
运行结果:
­%G亞囬乣¹Þ÷
abcd中国人123

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值