1. 程式人生 > >CTF中那些腦洞大開的編碼和加密

CTF中那些腦洞大開的編碼和加密

0x00 前言

正文開始之前先閒扯幾句吧,玩CTF的小夥伴也許會遇到類似這樣的問題:表哥,你知道這是什麼加密嗎?其實CTF中腦洞密碼題(非現代加密方式)一般都是各種古典密碼的變形,一般出題者會對密文進行一些處理,但是會給留一些線索,所以寫此文的目的是想給小夥伴做題時給一些參考,當然常在CTF裡出現的編碼也可以瞭解一下。本來是想盡快寫出參考的文章,無奈期間被各種事情耽擱導致文章斷斷續續寫了2個月,文章肯定有許多沒有提及到,歡迎小夥伴補充,總之,希望對小夥伴們有幫助吧!最後歡迎小夥伴來[部落格](https://www.hackfun.org/)玩耍:P(ps:由於寫文章是用markdown,而論壇編輯器不支援markdown語法,雖然我已經盡力去調整對其字元,可是效果還是不盡人意,如果影響閱讀理解可以去部落格閱讀:P)

0x01 目錄

 

        常見編碼:
                1.ASCII編碼
                2.Base64/32/16編碼
                3.shellcode編碼
                4.Quoted-printable編碼
                5.XXencode編碼
                6.UUencode編碼
                7.URL編碼
                8.Unicode編碼
                9.Escape/Unescape編碼
                10.HTML實體編碼
                11.敲擊碼(Tap code)
                12.莫爾斯電碼(Morse Code)
                13.編碼的故事

        各種文字加密

        換位加密:
                1.柵欄密碼(Rail-fence Cipher)
                2.曲路密碼(Curve Cipher)
                3.列移位密碼(Columnar Transposition Cipher)


        替換加密:
                1.埃特巴什碼(Atbash Cipher)
                2.凱撒密碼(Caesar Cipher)
                3.ROT5/13/18/47
                4.簡單換位密碼(Simple Substitution Cipher)
                5.希爾密碼(Hill Cipher)
                6.豬圈密碼(Pigpen Cipher)
                7.波利比奧斯方陣密碼(Polybius Square Cipher)
                8.夏多密碼(曲折加密)
                9.普萊菲爾密碼(Playfair Cipher)
                10.維吉尼亞密碼(Vigenère Cipher)
                11.自動金鑰密碼(Autokey Cipher)
                12.博福特密碼(Beaufort Cipher)
                13.滾動金鑰密碼(Running Key Cipher)
                14.Porta密碼(Porta Cipher)
                15.同音替換密碼(Homophonic Substitution Cipher)
                16.仿射密碼(Affine Cipher)
                17.培根密碼(Baconian Cipher)
                18.ADFGX和ADFGVX密碼(ADFG/VX Cipher)
                19.雙密碼(Bifid Cipher)
                20.三分密碼(Trifid Cipher)
                21.四方密碼(Four-Square Cipher)
                22.棋盤密碼(Checkerboard Cipher)
                23.跨棋盤密碼(Straddle Checkerboard Cipher)
                24.分組摩爾斯替換密碼(Fractionated Morse Cipher)
                25.Bazeries密碼(Bazeries Cipher)
                26.Digrafid密碼(Digrafid Cipher)
                27.格朗普雷密碼(Grandpré Cipher)
                28.比爾密碼(Beale ciphers)
                29.鍵盤密碼(Keyboard Cipher)

        其他有趣的機械密碼:
                1.恩尼格瑪密碼

        程式碼混淆加密:
                1.asp混淆加密
                2.php混淆加密
                3.css/js混淆加密
                4.VBScript.Encode混淆加密
                5.ppencode
                6.rrencode
                7.jjencode/aaencode
                8.JSfuck
                9.jother
                10.brainfuck程式語言


        相關工具

        參考網站

        彩蛋

0x02 正文 

常見編碼 

1.ASCII編碼 

ASCII編碼大致可以分作三部分組成:

第一部分是:ASCII非列印控制字元(參詳ASCII碼錶中0-31);

第二部分是:ASCII列印字元,也就是CTF中常用到的轉換;



第三部分是:擴充套件ASCII列印字元(第一第三部分詳見[ASCII碼錶](http://www.asciima.com/)解釋)。

編碼轉換示例

源文字:`The quick brown fox jumps over the lazy dog`
 



ASCII編碼對應十進位制:

 84 104 101 32 113 117 105 99 107 32 98 114 111 119 110 32 102 111 120 32 106 117 109 112 115 32 111 118 101 114 32 116 104 101 32 108 97 122 121 32 100 111 103

對應可以轉換成二進位制,八進位制,十六進位制等。

2.Base64/32/16編碼 

base64、base32、base16可以分別編碼轉化8位位元組為6位、5位、4位。16,32,64分別表示用多少個字元來編碼,這裡我注重介紹base64。Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位制資料。包括MIME的email,email via MIME,在XML中儲存複雜資料。

編碼原理:Base64編碼要求把3個8位位元組轉化為4個6位的位元組,之後在6位的前面補兩個0,形成8位一個位元組的形式,6位2進位制能表示的最大數是2的6次方是64,這也是為什麼是64個字元(A-Z,a-z,0-9,+,/這64個編碼字元,=號不屬於編碼字元,而是填充字元)的原因,這樣就需要一張對映表,如下:
 



舉個例子(base64):

> 源文字:T   h   e

> 對應ascii碼:84 104 101

> 8位binary:01010100 01101000 01100101

> 6位binary:010101 000110 100001 100101

> 高位補0:000010101 00000110 00100001 00100101

> 對應ascii碼:21   6   33   37

> 查表:V  G  h  l

利用Python base64模組,我們分別可以這樣加密解密base64 32 16:
 



3.shellcode編碼 

源文字:`The quick brown fox jumps over the lazy dog`

編碼後:

\x54\x68\x65\x7f\x71\x75\x69\x63\x6b\x7f\x62\x72\x6f\x77\x6e\x7f\x66\x6f\x78\x7f\x6a\x75\x6d\x70\x73\x7f\x6f\x76\x65\x72\x7f\x74\x68\x65\x7f\x6c\x61\x7a\x79\x7f\x64\x6f\x67



4.Quoted-printable 編碼 

它是多用途網際網路郵件擴充套件(MIME) 一種實現方式。有時候我們可以郵件頭裡面能夠看到這樣的編碼,編碼原理[參考](http://blog.chacuo.net/494.html)。
 



源文字:`敏捷的棕色狐狸跳過了懶惰的狗`

編碼後:

 
  1.  
  2. =E6=95=8F=E6=8D=B7=E7=9A=84=E6=A3=95=E8=89=B2=E7=8B=90=E7=8B=B8=E8=B7=B3=E8

  3.     =BF=87=E4=BA=86=E6=87=92=E6=83=B0=E7=9A=84=E7=8B=97

編碼解碼[連結](http://www.mxcz.net/tools/QuotedPrintable.aspx)

5.XXencode編碼 

XXencode將輸入文字以每三個位元組為單位進行編碼。如果最後剩下的資料少於三個位元組,不夠的部份用零補齊。這三個位元組共有24個Bit,以6bit為單位分為4個組,每個組以十進位制來表示所出現的數值只會落在0到63之間。以所對應值的位置字元代替。它所選擇的可列印字元是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64個字元。跟base64列印字元相比,就是UUencode多一個“-” 字元,少一個”/” 字元。
 



源文字:`The quick brown fox jumps over the lazy dog`

編碼後:`hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNkc+`

編碼解碼[連結](http://web.chacuo.net/charsetxxencode)

6.UUencode編碼 

UUencode是一種二進位制到文字的編碼,最早在unix 郵件系統中使用,全稱:Unix-to-Unix encoding,UUencode將輸入文字以每三個位元組為單位進行編碼,如果最後剩下的資料少於三個位元組,不夠的部份用零補齊。三個位元組共有24個Bit,以6-bit為單位分為4個組,每個組以十進位制來表示所出現的位元組的數值。這個數值只會落在0到63之間。然後將每個數加上32,所產生的結果剛好落在ASCII字符集中可列印字元(32-空白…95-底線)的範圍之中。

源文字:`The quick brown fox jumps over the lazy dog`

編碼後:`M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9PH*`

編碼解碼[連結](http://web.chacuo.net/charsetuuencode)

7.URL編碼 

url編碼又叫百分號編碼,是統一資源定位(URL)編碼方式。URL地址(常說網址)規定了常用地數字,字母可以直接使用,另外一批作為特殊使用者字元也可以直接用(/,:@等),剩下的其它所有字元必須通過%xx編碼處理。 現在已經成為一種規範了,基本所有程式語言都有這種編碼,如js:有encodeURI、encodeURIComponent,PHP有 urlencode、urldecode等。編碼方法很簡單,在該位元組ascii碼的的16進位制字元前面加%. 如 空格字元,ascii碼是32,對應16進位制是'20',那麼urlencode編碼結果是:%20。

源文字:`The quick brown fox jumps over the lazy dog`

編碼後:

    %54%68%65%20%71%75%69%63%6b%20%62%72%6f%77%6e%20%66%6f%78%20%6a%75%6d%70%73%20%6f%76%65%72%20%74%68%65%20%6c%61%7a%79%20%64%6f%67

編碼解碼[連結](http://web.chacuo.net/charseturlencode)

8.Unicode編碼 

Unicode編碼有以下四種編碼方式:
 

源文字:`The`

&x [Hex]:`&x0054;&x0068;&x0065;`

& [Decimal]:`&00084;&00104;&00101;`

\U [Hex]:`\U0054\U0068\U0065`

\U+ [Hex]:`\U+0054\U+0068\U+0065`



編碼解碼[連結](http://www.mxcz.net/tools/Unicode.aspx)

9.Escape/Unescape編碼 

Escape/Unescape加密解碼/編碼解碼,又叫%u編碼,採用UTF-16BE模式, Escape編碼/加密,就是字元對應UTF-16 16進製表示方式前面加%u。Unescape解碼/解密,就是去掉"%u"後,將16進位制字元還原後,由utf-16轉碼到自己目標字元。如:字元“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。

源文字:`The`

編碼後:`%u0054%u0068%u0065`

10.HTML實體編碼 
 



完整編碼手冊[參考](http://www.w3school.com.cn/tags/html_ref_entities.html)

11.敲擊碼 

敲擊碼(Tap code)是一種以非常簡單的方式對文字資訊進行編碼的方法。因該編碼對資訊通過使用一系列的點選聲音來編碼而命名,敲擊碼是基於5×5方格波利比奧斯方陣來實現的,不同點是是用K字母被整合到C中。

敲擊碼錶:

 
  1.           1  2  3  4  5

  2.         1 A  B C/K D  E

  3.         2 F  G  H  I  J

  4.         3 L  M  N  O  P

  5.         4 Q  R  S  T  U

  6.         5 V  W  X  Y  Z



12.莫爾斯電碼 

摩爾斯電碼(Morse Code)是由美國人薩繆爾·摩爾斯在1836年發明的一種時通時斷的且通過不同的排列順序來表達不同英文字母、數字和標點符號的訊號程式碼,摩爾斯電碼主要由以下5種它的程式碼組成:

1. 點(.)
2. 劃(-)
3. 每個字元間短的停頓(通常用空格表示停頓)
4. 每個詞之間中等的停頓(通常用` / `劃分)
5. 以及句子之間長的停頓

摩爾斯電碼字母和數字對應表:

        A  .-     N  -.     .  .-.-.-    +  .-.-.         1  .----
        B  -...   O  ---    ,  --..--   _  ..--.-        2  ..---
        C  -.-.   P  .--.   :  ---...    $  ...-..-       3  ...--
        D  -..    Q  --.-   "  .-..-.   &  .-...         4  ....-
        E  .      R  .-.     '  .----.   /  -..-.          5  .....
        F  ..-.   S  ...     !  -.-.--                     6  -....
        G  --.   T  -       ?  ..--..                     7  --...
        H  ....   U  ..-    @  .--.-.                    8  ---..
        I  ..      V  ...-    -  -....-                     9  ----.
        J  .---   W  .--    ;  -.-.-.                     0  -----
        K  -.-    X  -..-   (  -.--.           
        L  .-..    Y  -.--   )  -.--.-          
        M  --    Z  --..  =  -...-                                              

源文字:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

編碼後:

        - .... . / --.- ..- .. -.-. -.- / -... .-. --- .-- -. / ..-. --- -..- / .--- ..- -- .--. ... / --- ...- . .-. / - .... . / .-.. .- --.. -.-- / -.. --- --.


線上編碼解碼[傳送門](http://rumkin.com/tools/cipher/morse.php)

摩爾斯電碼除了能對字母數字編碼以外還對一些標點符號,非英語字元進行了編碼,而且還有一些特定意義的組合稱為特殊符號,比如`·-·-·-·-·-`表達的意思是呼叫訊號,表示“我有訊息傳送”。如果你感興趣可以參考[WiKi](https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81)。

13.編碼的故事

推薦大家去看[編碼的故事](http://wenku.baidu.com/link?url=kTrscV5j5AsZq5zvBpr2jdkEJW8LqgrkkKsddwWA3YlXmgeqh_be95nMxqbFPOYoVBVy3A6lutlcXVDYLdZ-3iRawJpc0VZ71as07FnxtGS)一文。


各種文字加密 

文字加密可以將正常文字內容打亂為不可連讀的文字或符號(漢字 數字 字母 音樂符號 國際音標 盲文 韓文 日文 傣文 彝文 箭頭符號 花朵符號 俄文),換行等格式資訊也會被清除,達到加密的作用。在進行文字加密時可以設定一個密碼,這樣只有知道密碼的人才能解密文字。密碼可以是數字、字母和下劃線,最多九位。

加密示例:

源文字:`敏捷的棕色狐狸跳過了懶惰的狗`
 



編碼解碼[連結](http://www.qqxiuzi.cn/bianma/wenbenjiami.php)


換位加密

1.柵欄密碼

**(1)介紹**

柵欄密碼(Rail-fence Cipher)就是把要加密的明文分成N個一組,然後把每組的第1個字元組合,每組第2個字元組合...每組的第N(最後一個分組可能不足N個)個字元組合,最後把他們全部連線起來就是密文,這裡以2欄柵欄加密為例。

明文:`The quick brown fox jumps over the lazy dog`

去空格:`Thequickbrownfoxjumpsoverthelazydog`

分組:`Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g`

第一組:`Teucbonojmsvrhlzdg`

第二組:`hqikrwfxupoeteayo`

密文:`Teucbonojmsvrhlzdghqikrwfxupoeteayo`

加解密[傳送門](http://www.practicalcryptography.com/ciphers/classical-era/rail-fence/)

2.曲路密碼

曲路密碼(Curve Cipher)是一種換位密碼,需要事先雙方約定金鑰(也就是曲路路徑)。

明文:`The quick brown fox jumps over the lazy dog`

填入5行7列表(事先約定填充的行列數)
 



加密的迴路線(事先約定填充的行列數)
 



密文:`gesfc inpho dtmwu qoury zejre hbxva lookT`

3.列移位密碼

**(1)介紹**

列移位密碼(Columnar Transposition Cipher)是一種比較簡單,易於實現的換位密碼,通過一個簡單的規則將明文打亂混合成密文。下面我們以明文 The quick brown fox jumps over the lazy dog,金鑰 how are u為例:

填入5行7列表(事先約定填充的行列數,如果明文不能填充完表格可以約定使用某個字母進行填充)
 



金鑰:`how are u`

按how are u在字母表中的出現的先後順序進行編號,我們就有a為1,e為2,h為3,o為4,r為5,u為6,w為7,所以先寫出a列,其次e列,以此類推寫出的結果便是密文:
 



密文:`qoury inpho Tkool hbxva uwmtd cfseg erjez`

這裡提供一個行列數相等的填充規則列移位密碼加解密[連結](http://www.practicalcryptography.com/ciphers/classical-era/columnar-transposition/)

另外由列移位密碼變化來的密碼也有其他的,比如[Amsco密碼](http://www.thonky.com/kryptos/amsco-cipher)(Amsco Cipher)和[Cadenus密碼](http://www.thonky.com/kryptos/cadenus-cipher)(Cadenus Cipher)。

替換加密 

1.埃特巴什碼

**(1)介紹**

埃特巴什碼(Atbash Cipher)是一種以字母倒序排列作為特殊金鑰的替換加密,也就是下面的對應關係:

    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ZYXWVUTSRQPONMLKJIHGFEDCBA

明文:`the quick brown fox jumps over the lazy dog`

密文:`gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt`

加解密[傳送門](http://www.practicalcryptography.com/ciphers/classical-era/atbash-cipher/)

2.凱撒密碼 

**(1)介紹**

凱撒密碼(Caesar Cipher或稱愷撒加密、愷撒變換、變換加密、位移加密)是一種替換加密,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推,更多[參考](https://en.wikipedia.org/wiki/Caesar_cipher)。

加密例項:

明文:`The quick brown fox jumps over the lazy dog`

偏移量:1

密文:`Uif rvjdl cspxo gpy kvnqt pwfs uif mbaz eph`
 



你也可以使用Python的pycipher模組來加解密,如果提示沒有這個模組可以通過`pip install pycipher`或者其他方式來安裝pycipher模組。

 
  1.  
  2. >>> from pycipher import Caesar

  3. >>> Caesar(key=1).encipher('The quick brown fox jumps over the lazy dog')

  4. 'UIFRVJDLCSPXOGPYKVNQTPWFSUIFMBAZEPH'

  5. >>> Caesar(key=1).decipher('UIFRVJDLCSPXOGPYKVNQTPWFSUIFMBAZEPH')

  6. 'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'

參考表(這裡是向後移位加密,向前移位解密):
 



加密解密[連結](http://planetcalc.com/1434/)(這個網站可以將26種情況一次性列舉出來,比較方便)

3.ROT5/13/18/47 

**(1)介紹**

ROT5/13/18/47是一種簡單的碼元位置順序替換暗碼。此類編碼具有可逆性,可以自我解密,主要用於應對快速瀏覽,或者是機器的讀取。

> ROT5 是 rotate by 5 places 的簡寫,意思是旋轉5個位置,其它皆同。下面分別說說它們的編碼方式:

> ROT5:只對數字進行編碼,用當前數字往前數的第5個數字替換當前數字,例如當前為0,編碼後變成5,當前為1,編碼後變成6,以此類推順序迴圈。

> ROT13:只對字母進行編碼,用當前字母往前數的第13個字母替換當前字母,例如當前為A,編碼後變成N,當前為B,編碼後變成O,以此類推順序迴圈。

> ROT18:這是一個異類,本來沒有,它是將ROT5和ROT13組合在一起,為了好稱呼,將其命名為ROT18。

> ROT47:對數字、字母、常用符號進行編碼,按照它們的ASCII值進行位置替換,用當前字元ASCII值往前數的第47位對應字元替換當前字元,例如當前為小寫字母z,編碼後變成大寫字母K,當前為數字0,編碼後變成符號_。用於ROT47編碼的字元其ASCII值範圍是33-126,具體可參考ASCII編碼,下面以rot13以例。

明文:`the quick brown fox jumps over the lazy dog`

密文:`gur dhvpx oebja sbk whzcf bire gur ynml qbt`

[傳送門](http://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php)

4.簡單替換密碼 

**(1)介紹**

簡單換位密碼(Simple Substitution Cipher)加密方式是以每個明文字母被與之唯一對應且不同的字母替換的方式實現的,它不同於愷撒密碼,因為密碼字母表的字母不是簡單的移位,而是完全是混亂的。 比如:

    明文字母 : abcdefghijklmnopqrstuvwxyz
    明文字母 : phqgiumeaylnofdxjkrcvstzwb

明文:`the quick brown fox jumps over the lazy dog`

密文:`cei jvaql hkdtf udz yvoxr dsik cei npbw gdm`

**(2)破解**

當密文資料足夠多時這種密碼我們可以通過字頻分析方法破解或其他方法破解,比較好的線上詞頻分析網站[http://quipqiup.com/index.php](http://quipqiup.com/index.php)(翻= =牆),這裡推薦一篇通過"爬山演算法"來破解簡單替換密碼[文章](http://www.practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-simple-substitution-cipher/),基於文中的演算法實現的工具來破解示例。

密文:

    pmpafxaikkitprdsikcplifhwceigixkirradfeirdgkipgigudkcekiigpwrpucikceiginasikwduearrxiiqepcceindgmieinpwdfprduppcedoikiqiasafmfddfipfgmdafmfdteiki

解密:
 


(ps:score值越小越準確)

金鑰:`PHQGIUMEAVLNOFDXBKRCZSTJWY`

明文:

    AGAINPIERREWASOVERTAKENBYTHEDEPRESSIONHESODREADEDFORTHREEDAYSAFTERTHEDELIVERYOFHISSPEECHATTHELODGEHELAYONASOFAATHOMERECEIVINGNOONEANDGOINGNOWHERE

將明文轉換成可讀句子:

again pierre was over taken by the depression he so dreaded for three day safter the delivery of his speech at the lodge he lay on a  sofa at home receiving no one and going no where

5.希爾密碼 

**(1)介紹**

希爾密碼(Hill Cipher)是基於線性代數多重代換密碼,由Lester S. Hill在1929年發明。每個字母轉換成26進位制數字:A=0, B=1, C=2...Z=25一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果MOD26。更多[參考](https://en.wikipedia.org/wiki/Hill_cipher)

**(2)加密**

明文:`ACT`
 



明文對應矩陣:
 



加密金鑰:`GYBNQKURP`

加密矩陣:
 



計算過程:
 



密文:`FIN`

**(3)解密**

密文:`FIN`

計算加密矩陣的逆矩陣:
 



解密計算:
 



明文:`ACT`

至於證明和求逆可以參考線性代數知識。

**(4)破解**

密碼分析一門破解編碼和密碼的藝術。當我們嘗試去攻破希爾密碼你會發現頻率分析實際上沒有什麼用處,特別在金鑰長度增多的情況下。對於較長的二元矩陣(2×2的希爾密碼)頻率分析可能可能會有幫助,但是對於較短的密文分析是沒有實際作用的。

這裡推薦一篇關於用[已知明文樣本攻擊的方式破解希爾密碼](http://www.practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-hill-cipher/)的文章,基礎的希爾密碼用[已知明文攻擊](https://en.wikipedia.org/wiki/Known-plaintext_attack)的方式是可攻破的,由於加密完全是線性的,所以攻擊者在擷取到部分明文/密文字元對可以輕鬆建立一個線性系統,輕鬆搞定希爾密碼,如果不能完全確定線性系統,那麼只需要新增部分明文/密文對即可。已知明文攻擊時最好的方式去破解寫入密碼,如果明文一無所知,那就進行推測猜出部分明文。基於已知明文樣本攻擊的方式破解希爾密碼的演算法的實現工具破解示例:

密文:

    XUKEXWSLZJUAXUNKIGWFSOZRAWURORKXAOSLHROBXBTKCMUWDVPTFBLMKEFVWMUXTVTWUIDDJVZKBRMCWOIWYDXMLUFPVSHAGSVWUFWORCWUIDUJCNVTTBERTUNOJUZHVTWKORSVRZSVVFSQXOCMUWPYTRLGBMCYPOJCLRIYTVFCCMUWUFPOXCNMCIWMSKPXEDLYIQKDJWIWCJUMVRCJUMVRKXWURKPSEEIWZVXULEIOETOOFWKBIUXPXUGOWLFPWUSCH

解密:

解密[指令碼例項](http://bobao.360.cn/ctf/learning/136.html)

線上加解密[傳送門](http://www.practicalcryptography.com/ciphers/hill-cipher/)

6.豬圈密碼

**(1)介紹**

豬圈密碼(Pigpen Cipher或稱九宮格密碼、朱高密碼、共濟會密碼或共濟會員密碼),是一種以格子為基礎的簡單替代式密碼。更多[參考](https://en.wikipedia.org/wiki/Pigpen_cipher)

明文字母和對應密文:
 



明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

密文:
 



線上加密[傳送門](http://www.simonsingh.net/The_Black_Chamber/pigpen.html)


**(2)變種**

聖堂武士密碼(Templar Cipher)是共濟會的“豬圈密碼”的一個變種,一直被共濟會聖殿騎士用。

明文字母和對應密文:
 



**(3)其他變種**

明文字母和對應密文:
 



明文字母和對應密文:
 



明文字母和對應密文:
 



7.波利比奧斯方陣密碼 

**(1)介紹**

波利比奧斯方陣密碼(Polybius Square Cipher或稱波利比奧斯棋盤)是棋盤密碼的一種,是利用波利比奧斯方陣進行加密的密碼方式,簡單的來說就是把字母排列好,用座標(行列)的形式表現出來。字母是密文,明文便是字母的座標。更多[參考](https://en.wikipedia.org/wiki/Polybius_square)

常見的排布方式:
 



加密例項:

明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

密文:`442315 4145241325 1242345233 213453 2445323543 442315 31115554 143422`

8.夏多密碼(曲折加密) 

**(1)介紹**

夏多密碼是作者麥克斯韋·格蘭特在中篇小說《死亡之鏈》塑造夏多這一英雄人物中所自創的密碼,如下圖所示:
 



> 注意,在以上所示的字母表金鑰的底部,列有四個附加符號1,2,3,4.他們可以放在密文中的任何地方。每個附加符號指示,如何轉動寫有密文的紙張,再進行後續的加密或解密操作,直到出現另一個附加符號。可以把每個附加符號中的那根線看作是指示針,它指示了紙張的上端朝上,朝右,朝下,朝左。比如說:如果出現符號3,那麼紙張就應該轉動180度,使其上端朝下;
> 符號2表示紙張上端朝右,依次類推。

源文字:`I AM IN DANGER SEND HELP(我有危險,速來增援)`

密文:
 



9.普萊菲爾密碼

普萊菲爾密碼(Playfair Cipher)是第一種用於實際的雙字替換密碼,用雙字加密取代了簡單代換密碼的單字加密,很明顯這樣使得密文更難破譯,因為使用簡單替換密碼的頻率分析基本沒有什麼作用,雖然頻率分析,通常仍然可以進行,但是有25×25=625種可能而不是25種可能,可以分為三個步驟,即編制密碼錶、整理明文、編寫譯文,下面我們以明文:
`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`和金鑰`CULTURE`為例來講解。普萊菲爾密碼又稱為單方密碼(Single Cipher)之後又出現它的升級版Double Playfair,也就是[二方密碼](https://en.wikipedia.org/wiki/Two-square_cipher)(Two-square Cipher),在之後又有四方密碼(Four-square Cipher)

**(1)編制密碼錶**

1.整理金鑰字母`C U L T U R E`,去掉後面重複的字母得到:`C U L T R E`

2.用上一步得到的字母自上而下來填補5乘5方表的縱列(也可橫排),之後的空白按照相同的順序用字母表中剩餘的字母依次填補完整,得到如下的方格:
 



> 這一步需要注意的要點:整理金鑰字母時,如果出現"Z",則需要去除,因為在英文裡"Z"的使用頻率最低,相應的如果是德文,則需將"I"與"J"當作一個字母來看待,而法語則去掉"W"或"K"。

**(2)整理明文**

我們要遵循的原則是“兩個一組”,得到是若干個兩兩成對的字母段,用到的是明文`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`與字母"`X`":

1.將明文兩兩一組按順序排開,得到:`TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO G`

2.對於末尾的單個字母要加上一個"`X`"使之成對:`TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX`
> 這一步需要注意的要點:對於相連字母相同者,每個後面都需要加"`X`",例如`TOMORROW`,需要寫成:`TO MO RX RX OW`。

**(3)編寫密文**

我們要得到的密文,當然,對於每個字母對,要嚴格遵循如下的原則:

> 1.如果兩個字母在同一行則要用它右鄰的字母替換,如果已在最右邊,則用該行最左邊的替換,如明文為"`CE`",依據上表,應替換為"`EG`"; 

> 2.如果兩個字母在同一列則要用它下邊的字母替換,如果已在最下邊,則用該行最上邊的替換,如明文為"`OQ`",依據上表,應替換為"`PS`";

> 3.如果兩個字母在不同的行或列,則應在密碼錶中找兩個字母使四個字母組成一個矩形,明文佔據兩個頂點,需用另外兩個頂點的字母替換,如明文為"`HX`",可以替換為"`WI/J`"或"`I/JW`"(下面的例子將按照橫向替換原則即同行優先)。

按照上述原則,將明文`TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX`加以轉換得到`KU ND LH GT LF WU ES PW LH SI/J NP CG CR AG BU VZ QA I/JV`(/表示或者,不過一般用I不用J,所以分析密文時你看25個字母都有而只差一個字母沒有用到可以考慮一下這種加密方式)將得到的字母改為大寫並五個一組列好,得到密文`KUNDL HGTLF WUESP WLHSI NPCGC RAGBU VZQAI V`。

加密解密[傳送門](http://www.practicalcryptography.com/ciphers/classical-era/playfair/)(ps:這裡加解密是橫向編制密碼錶)

加密解密例項(ps:這裡加解密也是橫向編制密碼錶):

 
  1.  
  2. >>>from pycipher import Playfair

  3. >>>Playfair('CULTREABDFGHIKMNOPQSVWXYZ').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')

  4. 'UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV'

  5. >>>Playfair('CULTREABDFGHIKMNOPQSVWXYZ').decipher('UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV')

  6. 'THEQUICKBROWNFOXIUMPSOVERTHELAZYDOGX'

10.維吉尼亞密碼

**(1)介紹**

維吉尼亞密碼(Vigenère Cipher)是在單一愷撒密碼的基礎上擴展出多表代換密碼,根據金鑰(當金鑰長度小於明文長度時可以迴圈使用)來決定用哪一行的密表來進行替換,以此來對抗字頻統計,更多[參考](https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher)。

密表:
 



明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

金鑰(迴圈使用,金鑰越長相對破解難度越大):`CULTURE`

加密過程:如果第一行為明文字母,第一列為金鑰字母,那麼明文字母'T'列和金鑰字母'C'行的交點就是密文字母'V',以此類推。

密文:`VBP JOZGM VCHQE JQR UNGGW QPPK NYI NUKR XFK`

**(2)已知金鑰加解密**

 
  1.  
  2. >>>from pycipher import Vigenere

  3. >>>Vigenere('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')

  4. 'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'

  5. >>>Vigenere('CULTURE').decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')

  6. 'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'

線上加密解密[傳送門](http://planetcalc.com/2468/)

**(3)未知金鑰破解**

可以參考[維吉尼亞密碼分析](http://www.practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher/)這篇文章,破解維吉尼亞密碼第一步是確定金鑰長度,維吉尼亞密碼分析這篇文章裡介紹了使用[重合指數](https://en.wikipedia.org/wiki/Index_of_coincidence)演算法來確定金鑰長度,在確定金鑰長度後就可以嘗試確定金鑰,通常我們可以使用[卡方檢驗](https://en.wikipedia.org/wiki/Chi-squared_test)來找到每個字母的偏移量,基於維吉尼亞密碼分析一文中的演算法實現的工具破解示例。

密文:`kiqpbkxspshwehospzqhoinlgapp`

解密:
 


(ps:結合左邊的值,金鑰以及解出明文可以確定kien 5或者klen 10為準確的結果)

明文:`DEFEND THE EAST WALL OF THE CASTLE`

**(4)變種**
 



有幾種密碼和維吉尼亞密碼相似,格羅斯費爾德密碼(Gronsfeld cipher)實際上和維吉尼亞密碼相同,除了使用了數字來代替字母以外沒有什麼區別。數字可以選擇一種數列,如斐波那契數列,或者一些其他的偽隨機序列。格羅斯費爾德密碼密碼分析過程和維吉尼亞密碼大同小異,不過,自動金鑰密碼不能使用[卡西斯基演算法](http://www.zybang.com/question/a0a1108423f63d10dbbf0c3e1bfdf3b3.html)(kasiski)來破譯,因為自動金鑰密碼的金鑰不重複迴圈使用,破譯自動金鑰密碼最好的方法的就是從密文不斷嘗試和猜測其中明文或金鑰的一部分。

 
  1. >>>from pycipher import Gronsfeld

  2. >>>Gronsfeld([2,20,11,45,20,43,4]).encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')

  3. VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'

  4. >>>Gronsfeld([2,20,11,45,20,43,4]).decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')

  5. THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'

線上加解密[傳送門](http://rumkin.com/tools/cipher/gronsfeld.php)

11.自動金鑰密碼

**(1)介紹**

自動金鑰密碼(Autokey Cipher)是多表替換密碼,與維吉尼亞密碼密切相關,但使用不同的方法生成金鑰,通常來說要比維吉尼亞密碼更安全。自動金鑰密碼主要有兩種,關鍵詞自動金鑰密碼和原文自動金鑰密碼.下面我們以關鍵詞自動金鑰為例:

明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

關鍵詞:`CULTURE`

自動生成金鑰:`CULTURE THE QUICK BROWN FOX JUMPS OVER THE`

接下來的加密過程和維吉尼亞密碼類似,從密表可得:

密文:`VBP JOZGD IVEQV HYY AIICX CSNL FWW ZVDP WVK`

**(2)已知關鍵詞加解密**

 
  1.  
  2. >>>from pycipher import Autokey

  3. >>>Autokey('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')

  4. 'VBPJOZGDIVEQVHYYAIICXCSNLFWWZVDPWVK'

  5. >>>Autokey('CULTURE').decipher('VBPJOZGDIVEQVHYYAIICXCSNLFWWZVDPWVK')

  6. 'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'

線上加解密[傳送門](http://www.practicalcryptography.com/ciphers/classical-era/autokey/)

**(3)未知關鍵詞破解**

推薦去看這篇[自動金鑰密碼分析文章](http://www.practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-autokey-cipher/),基於文中的演算法實現的工具來破解示例。

密文:

    isjiqymdebvuzrvwhmvysibugzhyinmiyeiklcvioimbninyksmmnjmgalvimlhspjxmgfiraqlhjcpvolqmnyynhpdetoxemgnoxl

解密
 


(ps:從klen 13可以看出使用的關鍵詞為'FORTIFICATION')

明文:

    DESPITEBEINGMORESECURETHANTHEVIGENERECIPHERTHEAUTOKEYCIPHERISSTILLVERYEASYTOBREAKUSINGAUTOMATEDMETHODS

將明文轉換成可讀句子:

despite being more secure than the vigenere cipher the autokey cipher is still very easy to break using automated methods

12.博福特密碼

**(1)介紹**

博福特密碼(Beaufort Cipher),是一種類似於維吉尼亞密碼的代換密碼,由弗朗西斯·蒲福(Francis Beaufort)發明。它最知名的應用是Hagelin M-209密碼機。博福特密碼屬於對等加密,即加密演演算法與解密演演算法相同。 

明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

金鑰(迴圈使用,金鑰越長相對破解難度越大):`CULTURE`

加密過程:如果第一行為明文字母,第一列為密文字母,那麼沿明文字母'T'列出現金鑰字母'C'的行號就是密文字母'J',以此類推。

密文:`JNH DAJCS TUFYE ZOX CZICM OZHC BKA RUMV RDY`

**(2)已知金鑰加解密**

 
  1.    

  2. >>>from pycipher import Beaufort

  3. >>>Beaufort('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')

  4. 'JNHDAJCSTUFYEZOXCZICMOZHCBKARUMVRDY'

  5. >>>Beaufort('CULTURE').decipher('JNHDAJCSTUFYEZOXCZICMOZHCBKARUMVRDY')

  6. 'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'

線上加解密[傳送門](http://www.practicalcryptography.com/ciphers/classical-era/beaufort/)

13.滾動金鑰密碼

**(1)介紹**

滾動金鑰密碼(Running Key Cipher)和維吉尼亞密碼有著相同的加密機制,區別是金鑰的選取,維吉尼亞使用的金鑰簡短,而且重複迴圈使用,與之相反,滾動金鑰密碼使用很長的金鑰,比如引用一本書作為金鑰。這樣做的目的是不重複迴圈使用金鑰,使密文更難破譯,儘管如此,滾動金鑰密碼還是可以被攻破,因為有關於金鑰和明文的統計分析模式可供利用,如果滾動金鑰密碼使用統計上的隨機金鑰來源,那麼理論上是不可破譯的,因為任何可能都可以成為金鑰,並且所有的可能性都是相等的。

明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

金鑰:選取C語言程式設計(1978版)第63頁第1行"errors can occur in several places. A label has...",去掉非字母部分作為金鑰(實際選取的金鑰很長,長度至少不小於明文長度)。

加密過程:加密過程和維吉尼亞密碼加密過程相同

密文:`XYV ELAEK OFQYH WWK BYHTJ OGTC TJI DAK YESR`

已知金鑰線上加解密[傳送門](http://www.practicalcryptography.com/ciphers/classical-era/running-key/)

14.Porta密碼

**(1)介紹**

Porta密碼(Porta Cipher)是一個由義大利那不勒斯的醫生Giovanni Battista della Porta發明的多表代換密碼,Porta密碼具有加密解密過程的是相同的特點。 

密表:


      KEYS| A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
      ------|----------------------------------------------------------------
       A,B | N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
       C,D | O P Q R S T U V W X Y Z N M A B C D E F G H I J K L
       E, F | P Q R S T U V W X Y Z N O L M A B C D E F G H I J K
       G,H | Q R S T U V W X Y Z N O P K L M A B C D E F G H I J
        I, J | R S T U V W X Y Z N O P Q J K L M A B C D E F G H I
       K, L | S T U V W X Y Z N O P Q R I J K L M A B C D E F G H
       M,N | T U V W X Y Z N O P Q R S H I J K L M A B C D E F G
       O, P | U V W X Y Z N O P Q R S T G H I J K L M A B C D E F
       Q, R | V W X Y Z N O P Q R S T U F G H I J K L M A B C D E
       S, T | W X Y Z N O P Q R S T U V E F G H I J K L M A B C D
       U, V | X Y Z N O P Q R S T U V W D E F G H I J K L M A B C
      W,X | Y Z N O P Q R S T U V W X C D E F G H I J K L M A B
      Y,Z | Z N O P Q R S T U V W X Y B C D E F G H I J K L M A


明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

金鑰(迴圈使用,金鑰越長相對破解難度越大):`CULTURE`

加密過程:明文字母'T'列與金鑰字母'C'行交點就是密文字母'F',以此類推。

密文:`FRW HKQRY YMFMF UAA OLWHD ALWI JPT ZXHC NGV`

已知金鑰線上加解密[傳送門](http://www.practicalcryptography.com/ciphers/classical-era/porta/)

**(2)破解**

Porta密碼可以被以[維吉尼亞密碼](http://www.practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher-part-2/)破解相類似方式進行自動攻破,破解Porta密碼第一步是先確定金鑰長度,這裡推薦一篇關於使用[重合指數演算法](https://en.wikipedia.org/wiki/Index_of_coincidence)確定為維吉尼亞金鑰長度[文章](http://www.practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher/)。

15.同音替換密碼

**(1)介紹**

同音替換密碼(Homophonic Substitution Cipher)是單字母可以被其他幾種密文字母同時替換的密碼,通常要比標準替換密碼破解更加困難,破解標準替換密碼最簡單的方法就是分析字母出現頻率,通常在英語中字母'E'(或'T')出現的頻率是最高的,如果我們允許字母'E'可以同時被3種不同字元代替,那麼就不能還是以普通字母的頻率來分析破解,如果允許可代替字元越多,那麼密文就會更難破譯。

常見代換規則表:
 



明文:`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`

密文(其中一種):`6CZ KOVST XJ0MA EQY IOGL4 0W1J UC7 P9NB F0H`

**(2)破解**

如果同音替換密碼的同音詞個數很多,那麼破解它難度很大,通常的方法採取類似破解替換密碼的"爬山演算法",除了找到一個明文字母對映幾個字元之外,我們還需要確定映射了那些字元,可以嘗試[2層巢狀"爬山演算法"](http://www.cs.sjsu.edu/faculty/stamp/RUA/homophonic.pdf)來破解,外層確定對映的數量,內層確定對映字元。

16.仿射密碼

**(1)介紹**

仿射密碼(Affine Cipher)是一種單表代換密碼,字母表中的每個字母相應的值使用一個簡單的數學函式對映到對應的數值,再把對應數值轉換成字母。這個公式意味著每個字母加密都會返回一個相同的字母,意義著這種加密方式本質上是一種標準替代密碼。因此,它具有所有替代密碼的弱點。每一個字母都是通過函式(ax + b)mod m加密,其中B是位移量,為了保證仿射密碼的可逆性,a和m需要滿足gcd(a , m)=1,一般m為設定為26。更多[參考](https://en.wikipedia.org/wiki/Affine_cipher)

常見的字母對應關係:
 



下面我們以E(x) = (5x + 8) mod 26函式為例子
 

相關推薦

CTF那些編碼加密

0x00 前言 正文開始之前先閒扯幾句吧,玩CTF的小夥伴也許會遇到類似這樣的問題:表哥,你知道這是什麼加密嗎?其實CTF中腦洞密碼題(非現代加密方式)一般都是各種古典密碼的變形,一般出題者會對密文進行一些處理,但是會給留一些線索,所以寫此文的目的是想給小夥伴做題時給一些參考,當然常在CTF裡出現的

[CTF]那些編碼加密

[CTF]中那些腦洞大開的編碼和加密 摘自:https://www.cnblogs.com/mq0036/p/6544055.html 0x00 前言 正文開始之前先閒扯幾句吧,玩CTF的小夥伴也許會遇到類似這樣的問題:表哥,你知道這是什麼加密嗎?其實CTF中腦洞密碼題(非現代加密方式)

遊戲私服還有這樣的創意用法?這真的是

私服過年的時候,和一些返鄉的遊戲圈好友茶話,天南海北的調侃著年終獎、吃雞遊戲和營銷創意之類的話題,然後就從泛濫的吃雞外掛扯到了私服上。私服是什麽?就是未經版權擁有者授權,非法獲得服務器端安裝程序之後設立的網絡服務器。簡單來說就是盜版網遊,或者說“玩了一個假遊戲”,但並非山寨。對於擺明就是盜版的東西,一位朋友卻

程式設計師一段程式碼慘遭老闆解僱,網友:簡直

程式設計師之間也存在著很大的差別。工作經驗,編碼能力等都有很多的差別。當然程式設計師的工作也與bug是不離不棄的。 小編最近逛論壇看到一貼。一程式設計師發帖晒出一段排序程式碼,具體如下 這段程式碼卻讓他遭到老闆辭退!看完這段程式碼後,網友們肯定有很多看法吧! 小編相信

!華為雲桌面無紙化會議系統結合會怎樣?

這幾年各大政府企業機構興起了“無紙化辦公”的浪潮。小編有幸接觸了幾個國內的無紙化廠家裝置。很多人對無紙化的認識都是比較淺顯,單純認為只要不用紙張就是實現了無紙化,這只是會議的電子化而已。實際上無紙化會議對軟體硬體的要求都很高。首先軟體要具備資訊內部交流,投影申請,同屏申請,服務申請,多人批註

[c++][重啟病毒]

介紹 看到知乎上的一個問題,於是有了做一個簡單病毒的主意,花了一下午的時間寫出來了,給同學發著玩玩,還挺有意思。 說一下病毒的症狀:執行exe程式後,電腦會重啟,之後的每次開機,都會在開機後60s後關機。 因為不是個惡意病毒,所以在每次開機的時候都會彈出一

,布萌區塊鏈在IT領域的3個解決方案

起源於比特幣的區塊鏈技術,現如今的影響力已經逐步超過了比特幣,成為科技圈和金融圈中新潮的代名詞。區塊鏈作為一項具有顛覆性潛力的技術,而布萌更是區塊鏈行業的佼佼者,它對現實生活中的IT領域將會有什麼樣的影響,能解決怎樣的問題呢? 區塊鏈是一項分散式記賬技術,跟現在中心化記

CodeForces 372B 的DP遞推

題目: 做了兩個多小時,腦洞大開,給了一個01矩陣,求以a,b,為左上角,c,d為右下角的矩陣內有多少包含部分全為0的子矩陣 對於這道題目,一開始就想到了DP遞推,感覺而已,雖然準,可是做不出啊,想好

圓周率π的計算曆程及各種的估計方法

圓周率是一個極其馳名的數。從有文字記載的歷史開始,這個數就引進了外行人和學者們的興趣。作為一個非

HDU_4919_Exclusive or_的公式題+大數

1.題意: 計算從k異或(n-k)的累加和, k=1,2,3,...,n-1。 2.題解 (1)首先會使用java大數和hashmap介面 (2)YY出這個公式 f(n)=4f(k)+6k..

”刷體力方法

我發現這個遊戲的贈送體力的頁面是以cookie來識別你是否已經贈送過的,所以,要刷體力很簡單,只要清理cookie就好了。 主要方法有兩個: 1、(適用於手機)設定為無痕瀏覽模式,或者開啟退出時清理快取功能,然後用手機瀏覽器開啟贈送體力的頁面,贈送完了退出瀏覽器,再重新開

盤點史上最無聊的6款APP,我已無力吐槽

S.M.T.H 送我上西天S.M.T.H,全稱 Send Me To Heaven,中文名為送我上西天。聽名字就很奇葩有木有,這個APP玩法很簡單:手機扔得越高,得分越高。最後的成績會計入全球性的排行榜,以刺激使用者來拋手機。絕對是對臂力和手機堅固程度的極大考驗,目前這個應用

PopupWindow消失動畫無效,的解決方案

專案用到一個專案PopupWindow底部彈窗,效果是這樣的 很自然的,像這種一般都需要新增切入退出動畫,於是照著常規的寫法 mWindow.setAnimationStyle(R.style.popup_window_bottombar);新增動畫效果,切入動畫沒有問

css程式碼實時預覽(的操作)

提問:一些網站上面是如何實現,css程式碼既可以顯示又可以編輯,而且編輯完了可以實時預覽(即網頁上改了css立馬顯示效果)? 答:(功能一)顯示:style 標籤預設顯示方式 display:none 要改成 display:block

如何記住OSI七層協議模型,有木有?

       學過計算機網路的各位,一定知道OSI七層協議模型。OSI七層協議模型(或簡稱OSI七層模型),是一個定義得非常好的協議規範,被認為是現代開放性通訊系統互連互通的標準參考模型。OSI模型有7

時間復雜度---數據結構

gif 算法 分享圖片 nbsp cli img 數據 close display 時間復雜度:核心關鍵算法語句被執行的次數判斷其效率高低 sum+=i; //執行100次 /*——————

小飛魚通達二 讓人腦的工作流二次開發(圖文)

今天小飛魚帶給大家的是最近嘗試的一次工作流的新的二次開發模式。這樣的開發模式簡直可以說已經突破了我們對工作流的使用的認識,完全跟使用其他的軟體的模式是一樣的。 下面,就先介紹一下軟體實現的幾個功能點。 1、實現人員、部門資訊的單條選擇 這個功能其實使用工作流本身的功能就

爆炸:5款創客DIY套件,強烈推薦!

世上腦洞千千萬,創客佔據一大半。DIY 能力 Max,腦洞更是大到無窮無際的 Makers 以“把腦洞變為現實、把創意變為生活”為人生宗旨,在開啟你新世界大門的這條路上拔足狂奔,你永遠不會知道下一秒他們能做個啥出來...限制我(們)想象力的難道不是貧窮?是枯竭的腦洞、是衰落的

Android Service那些未曾關注的回撥細節

Android開發中, 假設我們的app有且僅有一個Service元件, 那麼有幾個回撥和細節是我這兩天才關注到的(我目前的戰鬥力是不是太弱了?). 這裡以android-23的模擬器作為測試裝置, 分兩種情況備註下: (前臺服務指呼叫了startForeground的服務)