加密规则:
step1:将每一个字符对应的unicode编码,转换为二进制
step2:不足16位,前面用0补齐
例子:
1100 1001 0001 0011
0011 0110 0100 1100
分析:
每四个数字为一组,前二位数字又为一小组(front),后二位数字又为另外一个小组(back)
11 00加密后转换为 00 11 以此类推的到整个加密。
加密代码如下:
public class Encode {
// 封装一个补0的方法
public static String addZero(String src,int n){
for (int i = 0; i < n; i++) {
src = "0" + src;
}
return src;
}
public static String encode(String str){
String result = ""; // 加密结果
// 遍历str
for(int i=0;i<str.length();i++){
// 获取第i位的字符对应的unicode编码
int ch = str.charAt(i); // 22269
// ch转换为二进制
String bin = Integer.toBinaryString(ch);
// 101011011111101
// 补零
bin = addZero(bin,16-bin.length());
// 16位 0101 0110 1111 1101
for(int j=0;j<bin.length();j+=4){
// i i+1 i+2 i+3
String begin = bin.substring(j,j+2);
String end = bin.substring(j+2,j+4);
// 前后交换
result += end + begin;
}
}
return result;
}
public static void main(String[] args) {
String s= Encode.encode("敌方有情况");
System.out.println("敌方有情况后的二进制加密结果:"+s);
}
}
结果:
敌方有情况后的二进制加密结果:10010101000100111001010111100110100111010000011010010000001101010101010011100101
解密的过程就是加密的逆向过程,接下来我们将刚才加密的0/1代码输入控制台里面,验证是否能得到正确的信息。
解密代码如下:
public class Decode {
//解密算法
public static String decode(String code){
int count=0;
Boolean flag=false;
String str="";
String result="";
String chresult="";
for (int i = 0; i <code.length() ; i++) {
char ch=code.charAt(i);
str+=ch;
count++;
if (count==16){
for (int j = 0; j <str.length() ;j+=4) {
//前面
String begin=str.substring(j,j+2);
//后面
String end=str.substring(j+2,j+4);
//结果
result+=end+begin;
}
char ch1=(char)Integer.parseInt(result,2);
chresult+=ch1;
str="";
count=0;
result = "";
}
}
System.out.println("解密后的结果为:"+chresult);
return result;
}
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
System.out.println("请输入你要解密的代码:");
String code=in.nextLine();
decode(code);
}
}
由上可以看出,解密所获取的信息于加密的信息一致,证明代码正确。