• 【java加解密】置换加解密器


    【特点】

    和原文等长,但密钥容易被猜出来,因为seed小于原文长度。

    【代码】

    package com.hy.lab;
    
    /**
     * 置换加解密器
     */
    public class TranspositionCipher {
        public static String encrypt(String raw,int seed){
            String[] arr=new String[seed];
            for(int i=0;i<arr.length;i++){
                arr[i]="";
            }
    
            int n=raw.length();
            for(int i=0;i<n;i++){
                char c=raw.charAt(i);
                arr[i%seed]+=c;
            }
    
            return String.join("",arr);
        }
    
        public static String decrypt(String raw,int seed){
            int n=raw.length();
            int cols=(int)(Math.ceil(((double)n)/((double)seed)));
            int rows=seed;
            int spaceCnt=rows*cols-n;
    
            String[] arr=new String[cols];
            for(int i=0;i<arr.length;i++){
                arr[i]="";
            }
    
            int index=0;
            int row=0;
            int column=0;
    
            for(int i=0;i<n;i++){
                char c=raw.charAt(i);
                arr[column]+=c;
                column++;
    
                if(column==cols || (column==cols-1 && row>=rows-spaceCnt) ){
                    column=0;
                    row+=1;
                }
            }
    
            return String.join("",arr);
        }
    
        public static void main(String[] args){
            String[] arr=new String[]{"Common sense is not so common.","秦时明月汉时关万里长征人未还但使龙城飞将在不教胡马度阴山","ABCDEFGHJds","2131kgfjhj321","32132132132132ewqewq"};
            for(String str:arr){
                String en=encrypt(str,8);
                String de=decrypt(en,8);
                String msg=String.format("原文=%s 密文=%s 还原文=%s",str,en,de);
                System.out.println(msg);
            }
        }
    }

    【输出】

    原文=Common sense is not so common. 密文=Cenoonommstmme oo snnio. s s c 还原文=Common sense is not so common.
    原文=秦时明月汉时关万里长征人未还但使龙城飞将在不教胡马度阴山 密文=秦里龙马时长城度明征飞阴月人将山汉未在时还不关但教万使胡 还原文=秦时明月汉时关万里长征人未还但使龙城飞将在不教胡马度阴山
    原文=ABCDEFGHJds 密文=AJBdCsDEFGH 还原文=ABCDEFGHJds
    原文=2131kgfjhj321 密文=2h1j3312k1gfj 还原文=2131kgfjhj321
    原文=32132132132132ewqewq 密文=31q23e12w31q23123e2w 还原文=32132132132132ewqewq

    【参考资料】

    Python密码学教程 美国Al Sweigart著

    END

  • 相关阅读:
    Android jni/ndk编程五:jni异常处理
    Android jni/ndk编程四:jni引用类型
    Android jni/ndk编程三:native访问java
    Android jni/ndk编程二:jni数据类型转换(primitive,String,array)
    Android jni/ndk编程一:jni初级认识与实战体验
    C++静态库与动态库
    Android——NativeActivity
    Eclipse IDE for C/C++ Developers和MinGW安装配置C/C++开发学习环境详解
    Android OkHttp3简介和使用详解*
    Android MVP 设计模式*
  • 原文地址:https://www.cnblogs.com/heyang78/p/15992546.html
Copyright © 2020-2023  润新知