【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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需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取正实数)