栅欄密碼

栅欄密碼

解碼技術
所謂栅欄密碼,就是把要加密的明文分成N個一組,然後把每組的第1個字連起來,形成一段無規律的話。不過栅欄密碼本身有一個潛規則,就是組成栅欄的字母一般不會太多。(一般不超過30個,也就是一、兩句話)
    中文名:栅欄密碼 外文名:The rail fence cipher 性質:密碼 領域:加密學

解釋

一般比較常見的是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欄...失敗

嘗試7欄...成功

然而當棚欄和拼音相結合後,誕生出一種令人痛恨的新思路...

比如在正道學院網絡版的開篇flash中出現過這樣一個棚欄:

QGBKSYSHJIEUEIIIIAN

總共19個字母~貌似不符合棚欄的規則...其實是因為出現了一個叫做捆綁的冬冬:

Q G B K S Y SH J

I E U E I I IIAN

看到了嗎?上面是聲母,下面是韻母...

聲母中的sh和韻母中的ian都是被作者當為一個字符使用...

擴展

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 

                    {

                    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 

                        {

                        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 

                    {

                    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 

                        {

                            sb.append(str_c_char[i]);

                            sb.append(str_c_char[i+half]);

                        }

                            }

                        str_c=sb.toString();

上一篇:紅柳林煤礦

下一篇:溫州貸

相關詞條

相關搜索

其它詞條