Java实现简单的加密解密——小练习

加密规则:

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);
    }
}

在这里插入图片描述
由上可以看出,解密所获取的信息于加密的信息一致,证明代码正确。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值