123.异或加密法
在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
解密的方法就是再执行一次同样的操作。
加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。
下面的代码演示了如何实现该功能。
请仔细阅读,填写空缺的代码(下划线部分)。
注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
直接写在题面中不能得分。
public class Main{
static void print(char[] p){
for(char x:p)
System.out.printf("%s", x);
System.out.println();
}
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')//Mark!! i可能大于nk
uckey[i/8]|=(char) (0x80>>(i%8));//?
else
uckey[i/8]&=~(char)(0x80>>(i%8));
}
f(p,uckey,p.length);
print(p);
f(p,uckey,p.length);
print(p);
}
}