柵欄密碼

所謂柵欄密碼,就是把要加密的明文分成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();

相關詞條

熱門詞條

聯絡我們