【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

posted @   逆火狂飙  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-03-11 【高中数学/对数函数】探讨对数函数y=log_a_(x^2-x-1)+1通过的定点(a取正实数)
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示