Q:BIG GUINS如何分3栏如何解,求推理过程,答案
A:
1.分析:BIG GUINS共有8个字母,分3行的话,就是1、2行有3个字母,第三行有2个字母.第三行最后一位可空或用其它字母或符号补上(即有两种写法)
2.解密
去掉空格---BIGGUINS
把8个字母按3-3-2的形式分成BIG GUI NS这三组字母
(1).最后一位空:把每组字母的第一位相连,得到BGN;第二位相连得到IUS,第三位相连得到GI,即可得密码为BGN IUS GI.
最后去掉空格得到最终密码BGNIUSGI.
(2)最后一位补上其它字母或符号:把每组字母的第一位相连,得到BGN;第二位相连得到IUS,第三位相连得到GI,也可补一个@使之变为GI@.最后得到最终密码为BGNIUSGI@.
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
加密原理:把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码。
栅栏密码加密
比如明文: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
以上内容参考:百度百科-栅栏密码、百度百科-电码
1 import java.io.BufferedReader; 2 import java.io.FileWriter; 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.PrintWriter; 6 7 public class RailFence { 8 9 public static void main(String[] args) { 10 char[] buf;11 String str = new String("");12 StringBuffer sb1 = new StringBuffer("");13 StringBuffer sb2 = new StringBuffer("");14 15 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));16 try {17 PrintWriter out = new PrintWriter(new FileWriter("d:""czl.txt"));18 while((str=in.readLine())!= null) {19 if(str.equalsIgnoreCase("exit")) break; //退出操作20 System.out.println("明文:"+str); //将输入的字符串打印到控制台21 out.println("============栅栏加密技术=============");22 out.println("明文:"+str);23 buf = str.toCharArray(); //将输入的字符串转变为字符数组24 for(int i=0;ibuf.length;i++) {25 //将位置为0、2、4..放在sb1中,单数放sb2中26 if(i%2 == 0) 27 sb1.append(buf[i]); 28 else29 sb2.append(buf[i]);30 }31 out.println("密文:"+sb1.append(sb2)); //合并两个数组 32 }33 out.flush();34 out.close();35 } catch (IOException e) {36 e.printStackTrace();37 }38 39 }40 41 }