所謂柵欄密碼,就是把要加密的明文分成N個一組,然後把每組的第1個字連起來,形成一段無規律的話。 不過柵欄密碼本身有一個潛規則,就是組成柵欄的字母一般不會太多。(一般不超過30個,也就是一、兩句話)
基本介紹
- 中文名:柵欄密碼
- 外文名:The rail fence cipher
- 性質:密碼
- 領域:加密學
加密原理,擴展,實現的部分原始碼,
加密原理
①把將要傳遞的信息中的字母交替排成上下兩行。
②再將下面一行字母排在上面一行的後邊,從而形成一段密碼。
③例如:
明文:THE LONGEST DAY MUST HAVE AN END
加密:
1、把將要傳遞的信息中的字母交替排成上下兩行。
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
2、 密文:
將下面一行字母排在上面一行的後邊。
TEOGSDYUTAENN HLNETAMSHVAED
解密:
先將密文分為兩行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的順序組合成一句話
明文:HE LONGEST DAY MUST HAVE AN END
擴展
(1)在選擇行數時可以使多行,這樣對於加密強度有所提高。
(2)可以在加密之後在使用其他密碼進行加密,增加強度。
實現的部分原始碼
加密部分:
// 獲取密鑰和明文 String str_p = et_plaintext.getText().toString(); char[] str_p_char = null; { try { str_p_char = str_p.toCharArray(); } catch (Exception e) { System.out.println("Exception"); } int len=str_p_char.length; System.out.println("len:"+len); StringBuffer sb_1 = new StringBuffer(); StringBuffer sb_2 = new StringBuffer(); if(len%2==1) { for (int i = 0; i <len;i=i+1) { if(i%2==0) { sb_1.append(str_p_char[i]); } else { sb_2.append(str_p_char[i]); } } } else { for (int i = 0; i <len; i=i+2) { sb_1.append(str_p_char[i]); sb_2.append(str_p_char[i+1]); } } str_p = sb_1.toString()+sb_2.toString();解密部分: String str_c = et_ciphertext.getText().toString(); char []str_c_char = null; try { str_c_char=str_c.toCharArray(); } catch(Exception e) { System.out.println("Exception"); } int len=str_c_char.length; int half=len/2; StringBuffer sb = new StringBuffer(); if(len%2==1) { int i=0; for (i = 0; i <half;i=i+1) { sb.append(str_c_char[i]); sb.append(str_c_char[i+half+1]); } sb.append(str_c_char[half]); } else { for (int i = 0; i <half; i=i+1) { sb.append(str_c_char[i]); sb.append(str_c_char[i+half]); } } str_c=sb.toString();