正文開始以前先閒扯幾句吧,玩CTF的小夥伴也許會遇到相似這樣的問題:表哥,你知道這是什麼加密嗎?其實CTF中腦洞密碼題(非現代加密方式)通常都是各類古典密碼的變形,通常出題者會對密文進行一些處理,可是會給留一些線索,因此寫此文的目的是想給小夥伴作題時給一些參考,固然常在CTF裏出現的編碼也能夠了解一下。原本是想盡快寫出參考的文章,無奈期間被各類事情耽擱致使文章斷斷續續寫了2個月,文章確定有許多沒有說起到,歡迎小夥伴補充,總之,但願對小夥伴們有幫助吧!javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
常見編碼:
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編程語言
相關工具
參考網站
|
ASCII編碼大體能夠分做三部分組成:php
第一部分是:ASCII非打印控制字符(參詳ASCII碼錶中0-31);css
第二部分是:ASCII打印字符,也就是CTF中經常使用到的轉換;html
第三部分是:擴展ASCII打印字符(第一第三部分詳見ASCII碼錶解釋)。java
編碼轉換示例python
源文本:The quick brown fox jumps over the lazy dog
git
ASCII編碼對應十進制:github
1
|
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
|
對應能夠轉換成二進制,八進制,十六進制等。web
base6四、base3二、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:
源文本:The quick brown fox jumps over the lazy dog
編碼後:
1
|
\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
|
它是多用途互聯網郵件擴展(MIME) 一種實現方式。有時候咱們能夠郵件頭裏面可以看到這樣的編碼,編碼原理參考。
源文本:敏捷的棕色狐狸跳過了懶惰的狗
編碼後:
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
=BF=87=E4=BA=86=E6=87=92=E6=83=B0=E7=9A=84=E7=8B=97
|
編碼解碼連接
XXencode將輸入文本以每三個字節爲單位進行編碼。若是最後剩下的資料少於三個字節,不夠的部份用零補齊。這三個字節共有24個Bit,以6bit爲單位分爲4個組,每一個組以十進制來表示所出現的數值只會落在0到63之間。以所對應值的位置字符代替。它所選擇的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64個字符。跟base64打印字符相比,就是UUencode多一個「-」 字符,少一個」/」 字符。
源文本:The quick brown fox jumps over the lazy dog
編碼後:hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNkc+
編碼解碼連接
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*
編碼解碼連接
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
編碼後:
1
|
%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
|
編碼解碼連接
Unicode編碼有如下四種編碼方式:
源文本:The
&#x [Hex]:The
&# [Decimal]:The
\U [Hex]:\U0054\U0068\U0065
\U+ [Hex]:\U+0054\U+0068\U+0065
編碼解碼連接
Escape/Unescape加密解碼/編碼解碼,又叫%u編碼,採用UTF-16BE模式, Escape編碼/加密,就是字符對應UTF-16 16進製表示方式前面加%u。Unescape解碼/解密,就是去掉"%u"後,將16進制字符還原後,由utf-16轉碼到本身目標字符。如:字符「中」,UTF-16BE是:「6d93」,所以Escape是「%u6d93」。
源文本:The
編碼後:%u0054%u0068%u0065
完整編碼手冊參考
敲擊碼(Tap code)是一種以很是簡單的方式對文本信息進行編碼的方法。因該編碼對信息經過使用一系列的點擊聲音來編碼而命名,敲擊碼是基於5×5方格波利比奧斯方陣來實現的,不一樣點是是用K字母被整合到C中。
敲擊碼錶:
1
2
3
4
5
6
|
1 2 3 4 5
1 A B C/K D E
2 F G H I J
3 L M N O P
4 Q R S T U
5 V W X Y Z
|
摩爾斯電碼(Morse Code)是由美國人薩繆爾·摩爾斯在1836年發明的一種時通時斷的且經過不一樣的排列順序來表達不一樣英文字母、數字和標點符號的信號代碼,摩爾斯電碼主要由如下5種它的代碼組成:
/
劃分)摩爾斯電碼字母和數字對應表:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
編碼後:
1
|
- .... . / --.- ..- .. -.-. -.- / -... .-. --- .-- -. / ..-. --- -..- / .--- ..- -- .--. ... / --- ...- . .-. / - .... . / .-.. .- --.. -.-- / -.. --- --.
|
在線編碼解碼傳送門
摩爾斯電碼除了能對字母數字編碼之外還對一些標點符號,非英語字符進行了編碼,並且還有一些特定意義的組合稱爲特殊符號,好比·-·-·-·-·-
表達的意思是調用信號,表示「我有消息發送」。若是你感興趣能夠參考WiKi。
推薦你們去看編碼的故事一文。
文本加密能夠將正常文本內容打亂爲不可連讀的文字或符號(漢字 數字 字母 音樂符號 國際音標 盲文 韓文 日文 傣文 彝文 箭頭符號 花朵符號 俄文),換行等格式信息也會被清除,達到加密的做用。在進行文本加密時能夠設定一個密碼,這樣只有知道密碼的人才能解密文本。密碼能夠是數字、字母和下劃線,最多九位。
加密示例:
源文本:敏捷的棕色狐狸跳過了懶惰的狗
編碼解碼連接
(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
加解密傳送門
曲路密碼(Curve Cipher)是一種換位密碼,須要事先雙方約定密鑰(也就是曲路路徑)。
明文:The quick brown fox jumps over the lazy dog
填入5行7列表(事先約定填充的行列數)
加密的迴路線(事先約定填充的行列數)
密文:gesfc inpho dtmwu qoury zejre hbxva lookT
(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
這裏提供一個行列數相等的填充規則列移位密碼加解密連接
另外由列移位密碼變化來的密碼也有其餘的,好比Amsco密碼(Amsco Cipher)和Cadenus密碼(Cadenus Cipher)。
(1)介紹
埃特巴什碼(Atbash Cipher)是一種以字母倒序排列做爲特殊密鑰的替換加密,也就是下面的對應關係:
1
2
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA
|
明文:the quick brown fox jumps over the lazy dog
密文:gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt
加解密傳送門
(1)介紹
凱撒密碼(Caesar Cipher或稱愷撒加密、愷撒變換、變換加密、位移加密)是一種替換加密,明文中的全部字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例,當偏移量是3的時候,全部的字母A將被替換成D,B變成E,以此類推,更多參考。
加密實例:
明文: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
3
4
5
|
>>> from pycipher import Caesar
>>> Caesar(key=1).encipher('The quick brown fox jumps over the lazy dog')
'UIFRVJDLCSPXOGPYKVNQTPWFSUIFMBAZEPH'
>>> Caesar(key=1).decipher('UIFRVJDLCSPXOGPYKVNQTPWFSUIFMBAZEPH')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'
|
參考表(這裏是向後移位加密,向前移位解密):
加密解密連接(這個網站能夠將26種狀況一次性列舉出來,比較方便)
(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
(1)介紹
簡單換位密碼(Simple Substitution Cipher)加密方式是以每一個明文字母被與之惟一對應且不一樣的字母替換的方式實現的,它不一樣於愷撒密碼,由於密碼字母表的字母不是簡單的移位,而是徹底是混亂的。 好比:
1
2
|
明文字母 : 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(翻= =牆),這裏推薦一篇經過"登山算法"來破解簡單替換密碼文章,基於文中的算法實現的工具來破解示例。
密文:
1
|
pmpafxaikkitprdsikcplifhwceigixkirradfeirdgkipgigudkcekiigpwrpucikceiginasikwduearrxiiqepcceindgmieinpwdfprduppcedoikiqiasafmfddfipfgmdafmfdteiki
|
解密:
(ps:score值越小越準確)
密鑰:PHQGIUMEAVLNOFDXBKRCZSTJWY
明文:
1
|
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
(1)介紹
希爾密碼(Hill Cipher)是基於線性代數多重代換密碼,由Lester S. Hill在1929年發明。每一個字母轉換成26進制數字:A=0, B=1, C=2...Z=25一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果MOD26。更多參考
(2)加密
明文:ACT
明文對應矩陣:
加密密鑰:GYBNQKURP
加密矩陣:
計算過程:
密文:FIN
(3)解密
密文:FIN
計算加密矩陣的逆矩陣:
解密計算:
明文:ACT
至於證實和求逆能夠參考線性代數知識。
(4)破解
密碼分析一門破解編碼和密碼的藝術。當咱們嘗試去攻破希爾密碼你會發現頻率分析實際上沒有什麼用處,特別在密鑰長度增多的狀況下。對於較長的二元矩陣(2×2的希爾密碼)頻率分析可能可能會有幫助,可是對於較短的密文分析是沒有實際做用的。
這裏推薦一篇關於用已知明文樣本攻擊的方式破解希爾密碼的文章,基礎的希爾密碼用已知明文攻擊的方式是可攻破的,因爲加密徹底是線性的,因此攻擊者在截取到部分明文/密文字符對能夠輕鬆創建一個線性系統,輕鬆搞定希爾密碼,若是不能徹底肯定線性系統,那麼只須要添加部分明文/密文對便可。已知明文攻擊時最好的方式去破解寫入密碼,若是明文一無所知,那就進行推測猜出部分明文。基於已知明文樣本攻擊的方式破解希爾密碼的算法的實現工具破解示例:
密文:
1
|
XUKEXWSLZJUAXUNKIGWFSOZRAWURORKXAOSLHROBXBTKCMUWDVPTFBLMKEFVWMUXTVTWUIDDJVZKBRMCWOIWYDXMLUFPVSHAGSVWUFWORCWUIDUJCNVTTBERTUNOJUZHVTWKORSVRZSVVFSQXOCMUWPYTRLGBMCYPOJCLRIYTVFCCMUWUFPOXCNMCIWMSKPXEDLYIQKDJWIWCJUMVRCJUMVRKXWURKPSEEIWZVXULEIOETOOFWKBIUXPXUGOWLFPWUSCH
|
解密:
解密腳本實例
在線加解密傳送門
(1)介紹
豬圈密碼(Pigpen Cipher或稱九宮格密碼、朱高密碼、共濟會密碼或共濟會員密碼),是一種以格子爲基礎的簡單替代式密碼。更多參考
明文字母和對應密文:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:
在線加密傳送門
(2)變種
聖堂武士密碼(Templar Cipher)是共濟會的「豬圈密碼」的一個變種,一直被共濟會聖殿騎士用。
明文字母和對應密文:
(3)其餘變種
明文字母和對應密文:
明文字母和對應密文:
明文字母和對應密文:
(1)介紹
波利比奧斯方陣密碼(Polybius Square Cipher或稱波利比奧斯棋盤)是棋盤密碼的一種,是利用波利比奧斯方陣進行加密的密碼方式,簡單的來講就是把字母排列好,用座標(行列)的形式表現出來。字母是密文,明文即是字母的座標。更多參考
常見的排布方式:
加密實例:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:442315 4145241325 1242345233 213453 2445323543 442315 31115554 143422
(1)介紹
夏多密碼是做者麥克斯韋·格蘭特在中篇小說《死亡之鏈》塑造夏多這一英雄人物中所自創的密碼,以下圖所示:
注意,在以上所示的字母表密鑰的底部,列有四個附加符號1,2,3,4.他們能夠放在密文中的任何地方。每一個附加符號指示,如何轉動寫有密文的紙張,再進行後續的加密或解密操做,直到出現另外一個附加符號。能夠把每一個附加符號中的那根線看做是指示針,它指示了紙張的上端朝上,朝右,朝下,朝左。好比說:若是出現符號3,那麼紙張就應該轉動180度,使其上端朝下;
符號2表示紙張上端朝右,依次類推。
源文本:I AM IN DANGER SEND HELP(我有危險,速來增援)
密文:
普萊菲爾密碼(Playfair Cipher)是第一種用於實際的雙字替換密碼,用雙字加密取代了簡單代換密碼的單字加密,很明顯這樣使得密文更難破譯,由於使用簡單替換密碼的頻率分析基本沒有什麼做用,雖然頻率分析,一般仍然能夠進行,可是有25×25=625種可能而不是25種可能,能夠分爲三個步驟,即編制密碼錶、整理明文、編寫譯文,下面咱們以明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
和密鑰CULTURE
爲例來說解。普萊菲爾密碼又稱爲單方密碼(Single Cipher)以後又出現它的升級版Double Playfair,也就是二方密碼(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
。
加密解密傳送門(ps:這裏加解密是橫向編制密碼錶)
加密解密實例(ps:這裏加解密也是橫向編制密碼錶):
1
2
3
4
5
|
>>>from pycipher import Playfair
>>>Playfair('CULTREABDFGHIKMNOPQSVWXYZ').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV'
>>>Playfair('CULTREABDFGHIKMNOPQSVWXYZ').decipher('UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV')
'THEQUICKBROWNFOXIUMPSOVERTHELAZYDOGX'
|
(1)介紹
維吉尼亞密碼(Vigenère 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
3
4
5
|
>>>from pycipher import Vigenere
>>>Vigenere('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'
>>>Vigenere('CULTURE').decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'
|
在線加密解密傳送門
(3)未知密鑰破解
能夠參考維吉尼亞密碼分析這篇文章,破解維吉尼亞密碼第一步是肯定密鑰長度,維吉尼亞密碼分析這篇文章裏介紹了使用重合指數算法來肯定密鑰長度,在肯定密鑰長度後就能夠嘗試肯定密鑰,一般咱們可使用卡方檢驗來找到每一個字母的偏移量,基於維吉尼亞密碼分析一文中的算法實現的工具破解示例。
密文:kiqpbkxspshwehospzqhoinlgapp
解密:
(ps:結合左邊的值,密鑰以及解出明文能夠肯定kien 5或者klen 10爲準確的結果)
明文:DEFEND THE EAST WALL OF THE CASTLE
(4)變種
有幾種密碼和維吉尼亞密碼類似,格羅斯費爾德密碼(Gronsfeld cipher)實際上和維吉尼亞密碼相同,除了使用了數字來代替字母之外沒有什麼區別。數字能夠選擇一種數列,如斐波那契數列,或者一些其餘的僞隨機序列。格羅斯費爾德密碼密碼分析過程和維吉尼亞密碼大同小異,不過,自動密鑰密碼不能使用卡西斯基算法(kasiski)來破譯,由於自動密鑰密碼的密鑰不重複循環使用,破譯自動密鑰密碼最好的方法的就是從密文不斷嘗試和猜想其中明文或密鑰的一部分。
1
2
3
4
5
|
>>>from pycipher import Gronsfeld
>>>Gronsfeld([2,20,11,45,20,43,4]).encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'
>>>Gronsfeld([2,20,11,45,20,43,4]).decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'
|
在線加解密傳送門
(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
3
4
5
|
>>>from pycipher import Autokey
>>>Autokey('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'VBPJOZGDIVEQVHYYAIICXCSNLFWWZVDPWVK'
>>>Autokey('CULTURE').decipher('VBPJOZGDIVEQVHYYAIICXCSNLFWWZVDPWVK')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'
|
在線加解密傳送門
(3)未知關鍵詞破解
推薦去看這篇自動密鑰密碼分析文章,基於文中的算法實現的工具來破解示例。
密文:
1
|
isjiqymdebvuzrvwhmvysibugzhyinmiyeiklcvioimbninyksmmnjmgalvimlhspjxmgfiraqlhjcpvolqmnyynhpdetoxemgnoxl
|
解密
(ps:從klen 13能夠看出使用的關鍵詞爲'FORTIFICATION')
明文:
1
|
DESPITEBEINGMORESECURETHANTHEVIGENERECIPHERTHEAUTOKEYCIPHERISSTILLVERYEASYTOBREAKUSINGAUTOMATEDMETHODS
|
將明文轉換成可讀句子:
despite being more secure than the vigenere cipher the autokey cipher is still very easy to break using automated methods
(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
3
4
5
|
>>>from pycipher import Beaufort
>>>Beaufort('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'JNHDAJCSTUFYEZOXCZICMOZHCBKARUMVRDY'
>>>Beaufort('CULTURE').decipher('JNHDAJCSTUFYEZOXCZICMOZHCBKARUMVRDY')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'
|
在線加解密傳送門
(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
已知密鑰在線加解密傳送門
(1)介紹
Porta密碼(Porta Cipher)是一個由意大利那不勒斯的醫生Giovanni Battista della Porta發明的多表代換密碼,Porta密碼具備加密解密過程的是相同的特色。
密表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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
已知密鑰在線加解密傳送門
(2)破解
Porta密碼能夠被以維吉尼亞密碼破解相相似方式進行自動攻破,破解Porta密碼第一步是先肯定密鑰長度,這裏推薦一篇關於使用重合指數算法肯定爲維吉尼亞密鑰長度文章。
(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層嵌套"登山算法"來破解,外層肯定映射的數量,內層肯定映射字符。
(1)介紹
仿射密碼(Affine Cipher)是一種單表代換密碼,字母表中的每一個字母相應的值使用一個簡單的數學函數映射到對應的數值,再把對應數值轉換成字母。這個公式意味着每一個字母加密都會返回一個相同的字母,意義着這種加密方式本質上是一種標準替代密碼。所以,它具備全部替代密碼的弱點。每個字母都是經過函數(ax + b)mod m加密,其中B是位移量,爲了保證仿射密碼的可逆性,a和m須要知足gcd(a , m)=1,通常m爲設置爲26。更多參考
常見的字母對應關係:
下面咱們以E(x) = (5x + 8) mod 26函數爲例子
至於解密咱們知道
便可得出解密結果
以E(x) = (5x + 8) mod 26加密,經過計算可得D(x)=21(x - 8) mod 26,這樣即可以獲得明文。
可參考的Python腳本
加解密傳送門
(1)介紹
培根密碼(Baconian Cipher)是一種替換密碼,每一個明文字母被一個由5字符組成的序列替換,最初的加密方式就是由'A'和'B'組成序列替換明文(因此你固然也能夠用別的字母),好比字母'D'替換成"aaabb",如下是所有的對應關係(另外一種對於關係是每一個字母都有惟一對應序列,I和J與U/V各自都有不一樣對應序列):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
A = aaaaa I/J = abaaa R = baaaa
B = aaaab K = abaab S = baaab
C = aaaba L = ababa T = baaba
D = aaabb M = ababb U/V = baabb
E = aabaa N = abbaa W = babaa
F = aabab O = abbab X = babab
G = aabba P = abbba Y = babba
H = aabbb Q = abbbb Z = babbb
|
明文:T H E F O X
密文:baaba aabbb aabaa aabab abbab babab
加解密傳送門
(1)ADFGX密碼
ADFGX密碼(ADFGX Cipher)是結合了改良過的Polybius方格替代密碼與單行換位密碼的矩陣加密密碼,使用了5個合理的密文字母:A,D,F,G,X,這些字母之因此這樣選擇是由於當轉譯成摩爾斯電碼(ADFGX密碼是德國軍隊在一戰發明使用的密碼)不易混淆,目的是儘量減小轉譯過程的操做錯誤。
加密矩陣示例:
1
2
3
4
5
6
7
|
A D F G X
----------------
A | p h q g m
D | e a y n o
F | f d x k r
G | c v s z w
X | b u t i/j l
|
明文:THE QUICK BROWN FOX
結果矩陣加密:
1
|
XF AD DA AF XD XG GA FG XA FX DX GX DG FA DX FF
|
列移位密鑰:how are u
密文:DXADF AGXF XFFXD FXGGX DGFG AADA ADXXF
已知密鑰加解密:
1
2
3
4
5
6
|
>>>from pycipher import ADFGX
>>>a = ADFGX('phqgmeaynofdxkrcvszwbutil','HOWAREU')
>>>a.encipher('THE QUICK BROWN FOX')
'DXADFAGXFXFFXDFXGGXDGFGAADAADXXF'
>>>a.decipher('DXADFAGXFXFFXDFXGGXDGFGAADAADXXF')
'THEQUICKBROWNFOX'
|
在線加解密傳送門
(2)ADFGVX密碼
ADFGVX密碼實際上就是ADFGX密碼的擴充升級版,同樣具備ADFGX密碼相同的特色,加密過程也相似,不一樣的是密文字母增長了V,使得能夠再使用10數字來替換明文。
1
2
3
4
5
6
7
8
|
A D F G V X
-------------
A | p h 0 q g 6
D | 4 m e a 1 y
F | l 2 n o f d
G | x k r 3 c v
V | s 5 z w 7 b
X | j 9 u t i 8
|
因爲兩種加密過程徹底相似這裏就再也不重複給出加密過程。
1
2
3
4
5
6
|
>>>from pycipher import ADFGVX
>>>a = ADFGVX('ph0qg64mea1yl2nofdxkr3cvs5zw7bj9uti8','HOWAREU')
>>>a.encipher('THE QUICK BROWN FOX')
'DXXFAFGFFXGGGFGXDVGDVGFAVFVAFVGG'
>>>a.decipher('DXXFAFGFFXGGGFGXDVGDVGFAVFVAFVGG')
'THEQUICKBROWNFOX'
|
(1)雙密碼
雙密碼(Bifid Cipher)結合了波利比奧斯方陣換位密碼,並採用分級實現擴散,這裏的「雙」是指用2個密鑰進行加密。雙密碼是由法國Felix Delastelle發明,除此以外Felix Delastelle還發明瞭三分密碼(Trifid Cipher),四方密碼(Four-Square Cipher)。還有一個兩方密碼(Two-Square)與四方密碼相似,共軛矩陣雙密碼(Conjugated Matrix Bifid Cipher)也是雙密碼的變種。
示例密陣:
1
2
3
4
5
6
|
1 2 3 4 5
1| p h q g m
2| e a y l n
3| o f d x k
4| r c v s z
5| w b u t i/j
|
明文:THE QUICK BROWN FOX
通過密陣轉換:
行:512 15543 54352 333
列:421 33525 21115 214
分組:
51215 54354 35233 3
42133 52521 11521 4
合併:
1
|
5121542133 5435452521 3523311521 34
|
在通過密陣轉換後密文:WETED TKZNE KYOME X
(2)已知密陣加解密
1
2
3
4
5
|
>>>from pycipher import
>>>Bifid('phqgmeaylnofdxkrcvszwbuti',5).encipher('THE QUICK BROWN FOX')
'WETEDTKZNEKYOMEX'
>>>Bifid('phqgmeaylnofdxkrcvszwbuti',5).decipher('WETEDTKZNEKYOMEX')
'THEQUICKBROWNFOX'
|
在線加解密傳送門
(3)未知密陣破解
手工分析破解雙密碼是有必定難度的,每一個字母都是同過3個數字進行非線性代替轉換,並且以後還會對字母順序進行打亂,這樣使雙密碼比一些替換密碼和換位密碼更難破解。然而,如今是計算機時代,這張加密方式沒有安全性可言,經過模擬退火算法就能快速找到雙密碼的密陣。
這裏推薦一篇詳細的雙密碼破解分析的文章,基於模擬退火算法實現的工具破解示例:
密文:
1
|
KWTAZQLAWWZCPONIVBTTBVQUZUGRNHAYIYGIAAYURCUQLDFTYVHTNQEENUPAIFCUNQTNGITEFUSHFDWHRIFSVTBISYDHHASQSROMUEVPQHHCCRBYTQBHWYRRHTEPEKHOBFSZUQBTSYRSQUDCSAOVUUGXOAUYWHPGAYHDNKEZPFKKWRIEHDWPEIOTBKESYETPBPOGTHQSPUMDOVUEQAUPCPFCQHRPHSOPQRSSLPEVWNIQDIOTSQESDHURIEREN
|
解密:
獲得加密矩陣:
1
2
3
4
5
|
G B C M K
D H U E T
L V Y W I
X O Z S P
N F A R Q
|
明文:
1
|
CRYPTANALYS IS OF BIFID BY HAND IS ACTUALLY FAIRLY DIFFICULT THE FRACTIONATING NATURE OF THE CIPHER IE EACH LETTER IS SUBSTITUTED BY CHARACTERS THEN THESE CHARACTERS ARE IUM BLED WHICH WILL PULL THEM APART MAKES THE CIPHER MUCH STRONGER THAN SUBSTITUTION CIPHERS OR TRANSPOSITION CIPHER SON THEIR OWN
|
三分密碼(Trifid Cipher)結合換位和替換,三分密碼與雙密碼很是類似,差異之處就是用除了3×3×3的密陣代替5×5密陣。
示例密陣:
1
2
3
4
5
6
7
|
密陣順序 = EPSDUCVWYM.ZLKXNBTFGORIJHAQ
方陣 1 方陣 2 方陣 3
1 2 3 1 2 3 1 2 3
1 E P S 1 M . Z 1 F G O
2 D U C 2 L K X 2 R I J
3 V W Y 3 N B T 3 H A Q
|
明文:THE QUICK BROWN FOX.
通過密陣轉換:
1
2
3
4
|
T H E Q U I C K B R O W N F O X .
2 3 1 3 1 3 1 2 2 3 3 1 2 3 3 2 2
3 3 1 3 2 2 2 2 3 2 1 3 3 1 1 2 1
3 1 1 3 2 2 3 2 2 1 3 2 1 1 3 3 2
|
T(233)表示T在第一個方陣第三行第三列的位置
分組(分組密鑰以5爲例):
1
2
3
4
|
THEQU ICKBR OWNFO X.
23131 31223 31233 22
33132 22232 13311 21
31132 23221 32113 32
|
合併:
1
|
23131 33132 31132 31223 22232 23221 31233 13311 32113 22 21 32
|
在通過密陣轉換後密文:
1
2
|
231313313231132312232223223221312331331132113222132
N O O N W G B X X L G H H W S K W
|
想要深刻了解三分密碼並破解三分密碼的小夥伴推薦去看LANIKI教授的一篇密碼課程章節的講義。
(1)介紹
四方密碼(Four-Square Cipher)是相似普萊菲爾密碼雙字母加密密碼,這樣使加密效果強於其餘替換密碼,由於頻率分析變得更加困難了。
四方密碼使用4個預先設置的5×5字母矩陣,每一個矩陣包括25個字母,一般字母'j'被融入到'i'中(維基百科上說'q'被忽略,不過這不重要,由於'q'和'j'都是不多出現的字母),一般左上和右下矩陣式是標準字母排序明文矩陣,右上和左下矩陣是打亂順序的密鑰矩陣。
示例矩陣:
![四方密碼.png][47]
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
整理明文(分組不夠時用'X'填充):TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX
加密過程:分別在明文矩陣中找到'TH',分別找到他們在右上矩陣有左下矩陣的交點字母'ES'就是密文,以此類推。
密文:ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ
(2)已知密鑰矩陣加解密
1
2
3
4
5
6
|
>>>from pycipher import Foursquare
>>>fs = Foursquare('zgptfoihmuwdrcnykeqaxvsbl','mfnbdcrhsaxyogvituewlqzkp')
>>>fs.encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
'ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ'
>>>fs.decipher('ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ')
'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'
|
在線加解密傳送門
(3)未知密鑰矩陣破解
推薦一篇關於採用模擬退火算法的四方密碼分析文章,若是有足夠多的密文那麼四方密碼能夠輕易被破解,若是知道了明文和密文推出密鑰是很容易的,猜想部分明文是一個有效的方法去破解四方密碼,若是一部分明文已知或者能夠被猜想出
那麼咱們首先要肯定儘量多可利用的密鑰,而後才能夠進行更多的推測或者用其餘的方法破譯。基於四方密碼分析一文實現的C代碼破解示例:
密文(密文最好在200個字符以上):
HMMKEQESDTMDHLAWFWMNKSOSFOMRFNLWLKHNSQGGEKXEOLLVDXNRSQQGARTFKSAVNUDLFNDHESPZGQ
TWESAGPGSQSQSTPKUSBBQLQHESAGPGSQSQGXLNAVHTPMHMKKNYGSUGDMTPDGFNKYAVHXLWGEKRILESLZ
ZOFNAVIHRHRKAGHSMYUGEGNSRGAVMVOQPRLNKRXLMYLQPXILESQYBNRHRKAGKYQXDIHMPGPYOERZOLBEZ
LURFWLWUOLDDPNSQYAGMUQPQWESBEZVEQESDTMDBQLWDIUSHB
用法:
1
2
|
gcc -O3 -lm foursquarecrack2.c scoreText_2.c -o fsc
./fsc
|
輸出結果:
1
2
3
4
5
6
7
8
|
Running foursquarecrack, this could take a few minutes...
best score so far: -1239.505249, on iteration 1
Key: 'KFMLUGWSQEPOZTNRBHDAVXCIY','UGSVKFIZMOYXPQRWTHLNCABED'
plaintext: 'THECIPHERTEXTSQUARESCANBEGENERATEDUSINGAKEYWORDDROPPINGDUPLICAT
ELETTERSTHENFILLTHEREMAININGSPACESWITHTHEREMAININGLETTERSOFTHEA
LPHABETINORDERALTERNATIVELYTHECIPHERTEXTSQUARESCANBEGENERATEDCO
MPLETELYRANDOMLYTHEFOURSQUAREALGORITHMALLOWSFORTWOSEPARATEKEYSO
NEFOREACHOFTHETWOCIPHERTEXTMATRICESX'
|
棋盤密碼(Checkerboard Cipher)是使用一個波利比奧斯方陣和兩個密鑰做爲密陣的替換密碼,一般在波利比奧斯方陣中J字母每每被包含在I字母中。
示例密陣:
1
2
3
4
5
6
7
|
Q U I C K
--------------
B |K N I/J G H
R |P Q R S T
O |O Y Z U A
W |M X W V B
N |L F E D C
|
通過密陣替換:
1
2
|
明文:T H E Q U I C K B R O W N F O X
密文:RK BK RU OC OC BI NK BQ WK RI OQ WI BU NU OQ WU
|
跨棋盤密碼(Straddle Checkerboard Cipher)是一種替換密碼,當這種密碼在結合其餘加密方式,加密效果會更好。
棋盤示例(選擇3和7做爲變換):
1
2
3
4
|
0 1 2 3 4 5 6 7 8 9
f k m c p d y e
3: h b i g q r o s a z
7: l u t j n w v x
|
明文: T H E Q U I C K B R O W N F O X
通過加密棋盤替換獲得密文:72 30 9 34 71 32 4 1 31 35 36 75 74 0 36 77
固然咱們還能夠繼續用其餘的加密方式在對跨棋盤密碼加密出的結果再進行加密:
示例變換密鑰:83729
1
2
3
4
|
8372983729837298372983729837
+7230934713241313536757403677
-----------------------------
5502817432078501808630122404
|
在通過棋盤轉換後:
1
2
|
5502817432078501808630122404
ppfmyk n if pfkyfyd hkmmcfc
|
最終獲得密文: ppfmyk n if pfkyfyd hkmmcfc
在線加解密傳送門
分組摩爾斯替換密碼(Fractionated Morse Cipher)首先把明文轉換爲莫爾斯電碼,不過每一個字母之間用x
分開,每一個單詞用xx
分開。而後使用密鑰生成一個替換密表,這個密表包含全部. - x
組合的狀況(由於不會出現xxx
的狀況,因此一共26種組合)。
密鑰:MORSECODE
密表:
1
2
3
4
|
MORSECDABFGHIJKLNPQTUVWXYZ
.........---------XXXXXXXX
...---XXX...---XXX...---XX
.-X.-X.-X.-X.-X.-X.-X.-X.-
|
說明:密表下半部分是固定的,密表的安全性以及加密效果主要取決於使用的密鑰。
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
(相似)摩爾斯電碼:
1
|
-x....x.xx--.-x..-x..x-.-.x-.-xx-...x.-.x---x.--x-.xx..-.x---x-..-xx.---x..- --x.--.x...xx---x...-x.x.-.xx-x....x.xx.-..x.-x--..x-.--xx-..x---x--.
|
說明:明文在轉換爲(相似)摩爾斯電碼後進行每3個字符分組,再進行密表的查表。
密文(通過密表替換):LMUWC OQVHG ZMTAK EVYSW NOYJQ NLIQB JQCDH XMDYF TWRGP FWNH
已知密鑰在線加解密傳送門
Bazeries密碼(Bazeries Cipher)是換位密碼和替換密碼的組合,使用兩個波利比奧斯方陣,一個明文字母方陣,使用一個隨機的數字(通常小於1000000)的生成一個密鑰矩陣同時做爲第一輪明文劃分分組,好比2333這個數字翻譯爲英文即是TWO THOUSAND THREE HUNDRED THIRTY THREE,從第一個字母T開始選取不重複的字母,以後再從字母表中按序選取沒有出現的字母組成密鑰矩陣。
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
隨機數字:2333
明文矩陣:
1
2
3
4
5
|
A F L Q V
B G M R W
C H N S X
D I/J O T Y
E K P U Z
|
示例密鑰矩陣:
1
2
3
4
5
|
T W O H U
S A N D R
E I/J Y B C
F G K L M
P Q V X Z
|
明文分組:
1
2
|
2 3 3 3 2 3 3 3 2 3 3 3
TH EQU ICK BRO WN FOX JUM PSO VE RTH ELA ZYD OG
|
分組明文反序:
1
|
HT UQE KCI ORB WN XOF MUJ OSP EV EHT ALE DYZ GO
|
使用密鑰矩陣替換:
1
|
IL XHP QEG KDS YR CKW NXG KBV PU ILD TOP FMZ AK
|
(好比'H'在明文矩陣對應到密鑰矩陣的位置就是'I')
已知密鑰在線加解密傳送門
Digrafid密碼(Digrafid Cipher)使用兩個密鑰生成分別生成相似波利比奧斯方陣的3x9方格的密表。,主要有3分組和4分組兩類。
第一個方陣密鑰:digrafid
第二個方陣密鑰:cipher
密表:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
1 2 3 4 5 6 7 8 9
D I G R A F D B C 1 2 3
E H J L M N O P Q 4 5 6
S T U V W X Y Z # 7 8 9
c f s 1
i g t 2
p j u 3
h k v 4
e l w 5
r m x 6
a n y 7
b o z 8
d q # 9
|
明文:THE QUICK BROWN FOX
密錶轉換(以4分組爲例):
1
2
3
4
|
Th Eq Ui Ck Br Ow Nf Ox
2 1 3 9 8 7 6 7
7 5 7 2 1 6 5 6
4 9 2 4 6 5 1 6
|
說明:T在第一矩陣第2列,h在第二矩陣第4行,T所在的行與h所在的列相交的位置數字爲7,因此Th表示爲274。
轉換密文:
1
2
|
213 975 724 924 876 716 566 516
Ip #e Dk Ck Zr Dr Mx Ar
|
####27.格朗普雷密碼####
格朗普雷密碼(Grandpré Cipher)是替換密碼的一種,通常使用8個8字母的單詞橫向填充8x8方陣,且第一列爲一個單詞,而且在方陣中26個字母都必須出現一次以上。
示例密陣:
![格朗普雷密碼.jpg][48]
1
2
|
明文:T H E Q U I C K B R O W N F O
密文:84 27 82 41 51 66 31 36 15 71 67 73 52 34 67
|
說明:明文中的字母在密陣位置可能不止一個,因此加密結果可能有多種,可是不影響解密。密陣還有6x6,7x7,9x9,10x10幾種。顯然密陣越大每一個字母被替換的狀況就可能越多,那麼加密效果就更好。
比爾密碼(Beale ciphers)有三份密碼,固然這裏說的是已被破解第二份,是一種相似書密碼的替換密碼。
![比爾密碼.png][49]
以第二密碼爲例,每個數字表明美國《獨立宣言》的文本中的第幾個詞的首字母,如1表明第1個詞的首字母「w」,2表明第2個詞首字母「i」。解密後的文字以下:
I have deposited in the county of Bedford...
比爾密碼還有一段有趣的故事,感興趣能夠看一下比爾密碼的詳細介紹。
通常用到的鍵盤密碼就是手機鍵盤和電腦鍵盤兩種,2014 0ctf比賽裏Crypto類型中Classic一題就是電腦鍵盤密碼,詳細能夠參考,另外給出另一些參考狀況。
恩尼格瑪密碼機(德語:Enigma,又譯啞謎機,或「謎」式密碼機)是一種用於加密與解密文件的密碼機。確切地說,恩尼格瑪是對二戰時期納粹德國使用的一系列類似的轉子機械加解密機器的統稱,它包括了許多不一樣的型號,爲密碼學對稱加密算法的流加密。詳細工做原理參考維基百科。
![恩尼格瑪密碼.jpg][50]
在線模擬傳送門
感興趣能夠觀看播單:計算機歷史文化課
1.asp混淆加密
2.php混淆加密
ppencode-Perl把Perl代碼轉換成只有英文字母的字符串。
![ppencode.png][51]
ppencode傳送門
rrencode能夠把ruby代碼所有轉換成符號。
![rrencode.jpg][52]
rrencode傳送門
jjencode將JS代碼轉換成只有符號的字符串,相似於rrencode,介紹的PPT,aaencode能夠將JS代碼轉換成經常使用的網絡表情,也就是咱們說的顏文字js加密。
![aaencode.png][53]
aaencode傳送門
jjencode/aaencode的解密直接在瀏覽器的控制檯裏輸入密文便可執行解密,想要詳細瞭解jjencode是如何進行請參考,你也能夠在github上下載實現jjdecoder的源碼進行分析。
![aaencode解密.png][54]
JSFuck 可讓你只用 6 個字符[ ]( ) ! +
來編寫 JavaScript 程序。
![JSfuck.png][55]
JSfuck傳送門
jother是一種運用於javascript語言中利用少許字符構造精簡的匿名函數方法對於字符串進行的編碼方式。其中8個少許字符包括:! + ( ) [ ] { }
。只用這些字符就能完成對任意字符串的編碼。
![jother.png][56]
jother編碼傳送門
jother直接在瀏覽器(IE能夠)的控制檯裏輸入密文便可執行解密:
![jother解密.png][57]
Brainfuck是一種極小化的計算機語言,按照"Turing complete(完整圖靈機)"思想設計的語言,它的主要設計思路是:用最小的概念實現一種「簡單」的語言,BrainF**k 語言只有八種符號,全部的操做都由這八種符號(> < + - . , [ ]
)的組合來完成。
明文:hello!
1
2
3
|
+++++ +++++ [->++ +++++ +++<] >++++ .---. +++++ ++..+ ++.<+ +++++ +++++
[->++ +++++ ++++< ]>+++ ++++. <++++ +++[- >---- ---<] >--.< +++++ ++[->
----- --<]> ----- ----- .<
|
brainfuck傳送門
其餘稀奇古怪的編程語言請參考
轉自網絡