谁能解释一下栅栏密码??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能解释一下栅栏密码??相关的知识,希望对你有一定的参考价值。

参考技术A 栅栏密码
一、基本介绍
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。
一般来说见到一堆字母没有空格,就应该想一想是不是栅栏。
比较常见的是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
但是有些人就偏不把密码作出2栏,比如:
明文:THERE IS A CIPHER
七个一组:THEREIS ACIPHER
抽取字母:TA HC EI RP EH IE SR
组合得到密码:TAHCEIRPEHIESR
那么这时候就无法再按照2栏的方法来解了...
不过棚栏密码本身有一个潜规则,就是组成棚栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
这样,我们可以通过分析密码的字母数来解出密码...
比如:TAHCEIRPEHIESR
一共有14个字母,可能是2栏或者7栏...
尝试2栏 T A H C E I R
P E H I E S R
TPAEHHCIEEISRR
失败
尝试7栏
T A
H C
E I
R P
E H
I E
S R
THERE IS A CIPHER
成功
但是有的人出题时,题目中的字母个数是奇数,所以就有了下面的这种情况:
1,明文 you are beautiful
2,去空格
3,把它的字母一上一下地写:
y u r b a t f l
o a e e u i u
4,合并空格,然后把第二行移上来就成了:yurbatfloaeeuiu
二、变体
虽然栅栏密码最先主要是针对英文进行加密,但是随着越来越多的中国推理爱好者对加密方式的熟悉,他们自然而然的就想到了将栅栏与与汉语拼音结合。不过,当栅栏和拼音相结合后,诞生出一种令人痛恨的新思路...
比如在正道学院网络版的开篇flash中出现过这样一个棚栏:
QGBKSYSHJIEUEIIIIAN
总共19个字母~貌似不符合棚栏的规则...其实是因为出现了一个叫做捆绑的东西:
Q G B K S Y SH J
I E U E I I I IAN
七个不可思议事件
看到了吗?上面是声母,下面是韵母...
声母中的sh和韵母中的ian都是被作者当为一个字符使用
三、总结
今天所要讲的内容就是这些了。虽然内容有些简短,不过基本包含了栅栏密码中的一些要点。但是请大家注意,今天我虽然将栅栏密码单独进行了讲解,但是并不代表栅栏和其他的密码没有联系。其实每一种密码都可以和其他密码相结合,进行多次加密。因此,在以后解题的时候,不能局限于题目中的一两个特征就随意认为是用的哪一种密码。要仔细分析题目和所给的提示,防止自己上当受骗。本回答被提问者采纳

Java-密码加密

介绍两种密码加密的方法:

这两种很常见可以再百度随意找到。

1.摩斯密码;说道密码加密不得不提的方法。很是经典。

首先说一下他的对照表,直接上图。

核心思想就是替换明文密码,将字符对应的替换成-与.两种符号的组合;

2、栅栏密码;

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)

这个没有什么好说的了,举个栗子:对明文ASDFGHJKL进行加密;分成两组:基数位置一组,偶数位置一组。然后两组合并成ADGJLSFHK;

 

 

我对这两种加密方式进行了结合,对一个明文密码进行了三重加密:第一层栅栏一次,第二层在栅栏一次,第三层在一次摩斯加密;

先是栅栏部分:

 1 /*栅栏解密解密类*/
 2 public class Fence {
 3     /*加密部分*/
 4     public String encryption (String password){
 5         String p = new String();
 6         String p1 = new String();
 7         String p2 = new String();
 8         for    (int i = 0; i < password.length(); i++){
 9             if(i%2 == 0)
10                 p1 += p.valueOf(password.charAt(i));
11             else
12                 p2 += p.valueOf(password.charAt(i)); 
13         }
14         return p1+p2;
15     }
16     /*解密部分*/
17     public String decode(String FencePassword){
18         String password = new String();
19         String p = new String();
20         String p1 = FencePassword.substring(0, FencePassword.length()/2);
21         String p2 = FencePassword.substring(FencePassword.length()/2);
22         int i;
23         for    (i = 0; i < p1.length(); i++){
24             password += p.valueOf(p1.charAt(i)) + p.valueOf(p2.charAt(i));
25         }
26         if(FencePassword.length()%2 != 0)
27             password += p.valueOf(p2.charAt(i));
28         return password;
29     }
30 }

然后是摩斯部分:

这一部分比较繁琐,在于摩斯密码与符号之间的匹配问题上,想着用一个数组去存储,然后循环进行匹配;但是我是一个不怕麻烦只求简单的一个人,就进行了一个个的比较;

然后在摩斯加密解密的时候进行了两次的栅栏加密解密;这样用到加密解密的时候只要调用摩斯类的加密解密函数即可。

  1 /*摩斯加密解密类*/
  2 import java.util.StringTokenizer;
  3 
  4 public class Morse {
  5     /*摩斯密码与字符之间的匹配常量*/
  6     final String A = ".-";
  7     final String B = "---.";
  8     final String C = "-.-.";
  9     final String D = "-..";
 10     final String E = ".";
 11     final String F = "..-.";
 12     final String G = "--.";
 13     final String H = "....";
 14     final String I = "..";
 15     final String J = ".---";
 16     final String K = "-.-";
 17     final String L = ".-..";
 18     final String M = "--";
 19     final String N = "-.";
 20     final String O = "---";
 21     final String P = ".--.";
 22     final String Q = "--.-";
 23     final String R = ".-.";
 24     final String S = "...";
 25     final String T = "-";
 26     final String U = "..-";
 27     final String V = "...-";
 28     final String W = ".--";
 29     final String X = "-..-";
 30     final String Y = "-.--";
 31     final String Z = "--..";
 32     final String $0 = "-----";
 33     final String $1 = ".----";
 34     final String $2 = "..---";
 35     final String $3 = "...--";
 36     final String $4 = "....-";
 37     final String $5 = ".....";
 38     final String $6 = "-....";
 39     final String $7 = "--...";
 40     final String $8 = "---..";
 41     final String $9 = "----.";
 42     final String period = ".-.-.-"; // .
 43     final String colon = "---..."; // :
 44     final String comma = "--..--"; // ,
 45     final String semicolon = "-.-.-."; // ;
 46     final String question = "..--.."; // ?
 47     final String equal = "-...-"; // =
 48     final String doubleQuotation = ".-..-.";// "
 49     final String singleQuotation = ".----.";// \'
 50     final String slash = "-..-."; ///
 51     final String exclamation = "-.-.--"; // !
 52     final String hyphen = "-....-"; // -
 53     final String underscore = "..--.-"; // _
 54     final String lroundBrackets = "-.--."; // (
 55     final String rroundBrackets = "-.--.-"; // )
 56     final String $ = "...-..-"; // $
 57     final String ampersand = ".-..."; // &
 58     final String at = ".--.-."; // @
 59     final String plus = ".-.-."; // +
 60     /*加密对应的匹配*/
 61     public String matching(String str) {
 62         switch (str) {
 63         case "A":
 64             return A;
 65         case "B":
 66             return B;
 67         case "C":
 68             return C;
 69         case "D":
 70             return D;
 71         case "E":
 72             return E;
 73         case "F":
 74             return F;
 75         case "G":
 76             return G;
 77         case "H":
 78             return H;
 79         case "I":
 80             return I;
 81         case "J":
 82             return J;
 83         case "K":
 84             return K;
 85         case "L":
 86             return L;
 87         case "M":
 88             return M;
 89         case "N":
 90             return N;
 91         case "O":
 92             return O;
 93         case "P":
 94             return P;
 95         case "Q":
 96             return Q;
 97         case "R":
 98             return R;
 99         case "S":
100             return S;
101         case "T":
102             return T;
103         case "U":
104             return U;
105         case "V":
106             return V;
107         case "W":
108             return W;
109         case "X":
110             return X;
111         case "Y":
112             return Y;
113         case "Z":
114             return Z;
115         case "0":
116             return $0;
117         case "1":
118             return $1;
119         case "2":
120             return $2;
121         case "3":
122             return $3;
123         case "4":
124             return $4;
125         case "5":
126             return $5;
127         case "6":
128             return $6;
129         case "7":
130             return $7;
131         case "8":
132             return $8;
133         case "9":
134             return $9;
135         case ".":
136             return period;
137         case ":":
138             return colon;
139         case ",":
140             return comma;
141         case ";":
142             return semicolon;
143         case "?":
144             return question;
145         case "=":
146             return equal;
147         case "\\"":
148             return doubleQuotation;
149         case "\\\'":
150             return singleQuotation;
151         case "/":
152             return slash;
153         case "!":
154             return exclamation;
155         case "-":
156             return hyphen;
157         case "_":
158             return underscore;
159         case "(":
160             return lroundBrackets;
161         case ")":
162             return rroundBrackets;
163         case "$":
164             return $;
165         case "&":
166             return ampersand;
167         case "@":
168             return at;
169         case "+":
170             return plus;
171         }
172         return " ";
173     }
174     /*摩斯加密*/
175     public String encryption(String password) {
176         Fence f = new Fence();
177         password = f.encryption(password);
178         password = f.encryption(password);
179         String MorsePasswork = new String();
180         String mp = new String();
181         for (int i = 0; i < password.length(); i++) {
182             mp = mp.valueOf(password.charAt(i));
183             MorsePasswork += matching(mp) + "/";
184         }
185         return MorsePasswork;
186     }
187     /*解密对应换的匹配*/
188     public String matching2(String str) {
189         if (str.equals(A))
190             return "A";
191         else if (str.equals(B))
192             return "B";
193         else if (str.equals(C))
194             return "C";
195         else if (str.equals(D))
196             return "D";
197         else if (str.equals(E))
198             return "E";
199         else if (str.equals(F))
200             return "F";
201         else if (str.equals(G))
202             return "G";
203         else if (str.equals(H))
204             return "H";
205         else if (str.equals(I))
206             return "I";
207         else if (str.equals(J))
208             return "J";
209         else if (str.equals(K))
210             return "K";
211         else if (str.equals(L))
212             return "L";
213         else if (str.equals(M))
214             return "M";
215         else if (str.equals(N))
216             return "N";
217         else if (str.equals(O))
218             return "O";
219         else if (str.equals(P))
220             return "P";
221         else if (str.equals(Q))
222             return "Q";
223         else if (str.equals(R))
224             return "R";
225         else if (str.equals(S))
226             return "S";
227         else if (str.equals(T))
228             return "T";
229         谁能告诉我有关网络托管和filezilla主机用户名和密码的区别?

什么是BI,谁能解释一下?

谁能解释一下预定义的 GenericModel 类的这种语法? [复制]

这道题能解释一下吗?

谁能解释一下这个 NSPredicate 语法

DAO是啥啊?谁能帮忙解释一下??