/* 异或加密法 在对文本进行简单加密的时候,可以选择用一个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