栅栏密码怎么写java程序_栅栏密码
2栏栅栏密码:
比如明文:THERE IS A CIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:TH ER EI SA CI PH ER
先取出每行第一个字母:TEESCPE
再取出每行第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
而解密的时候,先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
分出空格,就可以得到原文了:
THERE IS A CIPHER
主要像是矩阵,以列为顺序依次取数。
------------------------------------------------
多栏栅栏密码:
明文:THERE IS A CIPHER
七个一组:THEREIS ACIPHER
抽取字母:TA HC EI RP EH IE SR
组合得到密码:TAHCEIRPEHIESR
可以通过分析密码的字母数来解出密码
比如:TAHCEIRPEHIESR
一共有14个字母,可能是2栏或者7栏
尝试2栏--》失败
尝试7栏--》成功
-------------------------------------------------
当字母数m为偶数时,分栏数可能是其因子
当字母数m为奇数时,可能是前m-1个均分,最后一个独自成行,当然也可能m+1均分,任意分都有可能
-----------------------------------------------------------------------------------------
完整测试例子如下:
import java.util.Scanner;
public class 栅栏密码技术 {
public static String quitBlank(String normalStr){
StringBuffer sBuffer=new StringBuffer();
for (int i = 0; i < normalStr.length(); i++) {
if(normalStr.charAt(i)!=' ')
sBuffer.append(normalStr.charAt(i));
}
return sBuffer.toString();
}
public static String En(int n,String Mstr){
StringBuffer result=new StringBuffer();
int step=(int)((double)Mstr.length()/n+0.5);
String[] splitStr=new String[n];
int temp=0;
for (int i = 0; i < n; i++) {
if(temp+step
splitStr[i]=Mstr.substring(temp, temp+step);
else
splitStr[i]=Mstr.substring(temp, Mstr.length());
temp+=step;
}
for (int i = 0; i < step; i++) {
for (int j = 0; j < n; j++) {
if(i
result.append(splitStr[j].charAt(i));
}
}
}
return result.toString();
}
public static String Dn(int n,String Mstr){
StringBuffer result=new StringBuffer();
int step=(int)((double)Mstr.length()/n+0.5);
String[] splitStr=new String[step];
int temp=0;
for (int i = 0; i < step; i++) {
if(temp+n
splitStr[i]=Mstr.substring(temp, temp+n);
else
splitStr[i]=Mstr.substring(temp, Mstr.length());
temp+=n;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < step; j++) {
if(i
result.append(splitStr[j].charAt(i));
}
}
}
return result.toString();
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("第一行输入明文字符\n"
+ "第二行输入分栏数n");
String normalStr=scan.nextLine();
int n=scan.nextInt();
String Mstr=quitBlank(normalStr);
String EnStr=En(n, Mstr);
System.out.println("密文如下:\n"+ EnStr);
String DnStr=Dn(n, EnStr);
System.out.println("解密后明文如下:\n"+ DnStr);
}
}
运行结果如下:
第一行输入明文字符
第二行输入分栏数n
abcdefghijk
3
密文如下:
aeibfjcgkdh
解密后明文如下:
abcdefghijk
----------------------------------
注意:加密时的分栏数(行数)为解密时的列数
取值时均由上至下按列取值即可。
栅栏密码怎么写java程序_栅栏密码相关推荐
- 栅栏密码怎么写java程序_简单栅栏密码加密器的JSF版
其实就是把昨天的这个程序放到一个WEB应用程序了,大体的程序没有什么变化,只有少许改动.创建一个FencePassword类,这个类有两个属性,一个是oldMessage表示加密前的信息,一个是new ...
- pat上写java程序_如何运行Java程序和设置CLASSPAT
导读: 如何运行JAVA和CLASSPATH环境变量的设置是学习和使用JAVA中最基本的问题,本不应在此赘述.但近来不少人在论坛上提出的问题却与此有关,我平时碰到的一些初学者也往往在这个问题上卡了壳, ...
- cmd写java程序_用cmd写一个最简单的Java程序
一,准备: 1.确保电脑中装有eclipse软件并且确保配置好环境变量 (1)环境变量配置方法: 特别提示:jdk和eclipse保存的路径不能有中文字符 1.打开我的电脑--属性--高级--环境变量 ...
- 如何用命令行写java程序_如何用java实现doc命令行
如何用java实现doc命令行, dir显示当前所有目录下的文件 cd 文件目录 进入到该目录 cd ..退到上级目录,一面是我写的代码,调试了. 不过有点小bug就是当你进去的是文件就会提示空指针异 ...
- 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧
写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...
- 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++
第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...
- 【小题目】写JAVA程序时可以创建一个名为123.java的源文件吗
在写JAVA程序时创建名为123.java的源文件,前提是该源文件中没有public修饰的类,因为一旦使用public修饰后类名必须与文件名相同,而类名为标识符,不能以数字开头.因此,在没有用publ ...
- 如何用记事本写Java程序
用记事本写Java程序 事先准备: 安装并配置好Java运行环境(JDK) 确认你的电脑中有记事本 确认电脑中的命令行窗口可以正常使用 开始: 首先,打开记事本,输入你要写的程序,例如: clas ...
- 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...
女朋友要过生日了,我想用java为她写一个程序,所以想请教大家, 希望大家给我出出点子, 同时手头有3D 等漂亮图形的java程序或其他一些特效的文字,图形java程序,都希望大家多提供, 多帮 ...
- qtp启动java程序_转: QTP六脉神剑之调用Java程序
查看( 1147 ) / 评论( 21 ) 六脉神剑之调用程 序0Xp1zLN_0版权声明:原创作品,转载请以链接方式注明出自http://www.51testing.com/?35,否则将追究法律责 ...
最新文章
- Android Studio 选项菜单和动画结合_谷歌准备为Android增加像iOS一样的功能
- p3295 [SCOI2016]萌萌哒
- YZYZ菜鸟编程小助手
- 关于vue父子组件之间事件触发及数据传递问题
- net framework 3.5 安装错误_PageAdmin CMS建站系统报http403错误的解决方案
- mysql binary 查询_MYSQL的binary解决mysql数据大小写敏感问题 《转载》
- 1. OpenMAX系列 —— ACodec和OMX的联系
- keepalived漂移VIP故障
- 5.PHP 命令行模式
- c语言会变颜色程序,【图片】(原创)用纯C变了个变色输出字符的程序。。。【c语言吧】_百度贴吧...
- 入坑codewars第五天-Dubstep、Regex validate PIN code
- md文件转换为pdf文件(带目录和不带目录简捷操作)
- python读取图片的exif信息
- MULTIPLE SPRING BOOT RUN CONFIGURATIONS WERE DETECTED. RUN DASHBOARD ALLOWS TO【已解决】
- List集合中根据相同属性的对象合并计算
- [置顶] 得失寸心知
- PS绘制扁平化风格相机镜头UI图标
- Oracle中的日期时间函数
- ChatGPT4高分通过数据库系统工程师(DBA)认证
- C++ enable_if的使用
热门文章
- ASPEN hysys焓值、熵值转化换算
- windows server 2012 安装 VC14(VC2015) 安装失败解决方案
- android自动计步_Android计步模块(类似微信运动)
- php表单验证插件下载,强力推荐10款Javascript表单验证插件
- 微信小程序-wxParse插件的使用
- TCP/UDP调试工具
- 使用 iPerf 测试路由器局域网性能
- Linux下安装qt5步骤
- 计算机安装软件没有管理员权限设置,实用技巧:如何在win10中安装没有管理员权限的软件...
- ubuntu下好用的TCP/UDP调试工具