版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
CTF中那些腦洞大開的編碼和加密0*00前言正文開場之前先閑扯幾句吧,玩CTF的小伙伴也許會遇到類似這樣的問題:表哥,你知道這是什么加密嗎?其實CTF中腦洞密碼題(非現(xiàn)代加密方式)一般都是各種古典密碼的變形,一般出題者會對密文進展一些處理,但是會給留一些線索,所以寫此文的目的是想給小伙伴做題時給一些參考,當(dāng)然常在CTF里出現(xiàn)的編碼也可以了解一下。本來是想盡快寫出參考的文章,無奈期間被各種事情耽誤導(dǎo)致文章斷斷續(xù)續(xù)寫了2個月,文章肯定有許多沒有提及到,歡送小伙伴補充,總之,希望對小伙伴們有幫助吧!最后歡送小伙伴來[博客](s://./)玩耍:P(ps:由于寫文章是用markdown,而論壇編輯器不支持markdown語法,雖然我已經(jīng)盡力去調(diào)整對其字符,可是效果還是不盡人意,如果影響閱讀理解可以去博客閱讀:P)0*01目錄常見編碼:1.ASCII編碼2.Base64/32/16編碼3.shellcode編碼4.Quoted-printable編碼5.**encode編碼6.UUencode編碼7.URL編碼8.Unicode編碼9.Escape/Unescape編碼10.HTML實體編碼11.敲擊碼(Tapcode)12.莫爾斯電碼(MorseCode)13.編碼的故事各種文本加密換位加密:1.柵欄密碼(Rail-fenceCipher)2.曲路密碼(CurveCipher)3.列移位密碼(ColumnarTranspositionCipher)替換加密:1.埃特巴什碼(AtbashCipher)2.凱撒密碼(CaesarCipher)3.ROT5/13/18/474.簡單換位密碼(SimpleSubstitutionCipher)5.希爾密碼(HillCipher)6.豬圈密碼(PigpenCipher)7.波利比奧斯方陣密碼〔PolybiusSquareCipher)8.夏多密碼(曲折加密)9.普萊菲爾密碼(PlayfairCipher)10.維吉尼亞密碼(VigenèreCipher)11.自動密鑰密碼(AutokeyCipher)12.博福特密碼(BeaufortCipher)13.滾動密鑰密碼(RunningKeyCipher)14.Porta密碼(PortaCipher)15.同音替換密碼(HomophonicSubstitutionCipher)16.仿射密碼(AffineCipher)17.培根密碼(BaconianCipher)18.ADFG*和ADFGV*密碼(ADFG/V*Cipher)19.雙密碼(BifidCipher)20.三分密碼(TrifidCipher)21.四方密碼(Four-SquareCipher)22.棋盤密碼〔CheckerboardCipher)23.跨棋盤密碼(StraddleCheckerboardCipher)24.分組摩爾斯替換密碼(FractionatedMorseCipher)25.Bazeries密碼(BazeriesCipher)26.Digrafid密碼(DigrafidCipher)27.格朗普雷密碼(GrandpréCipher)28.比爾密碼(Bealeciphers)29.鍵盤密碼(KeyboardCipher)其他有趣的機械密碼:1.恩尼格瑪密碼代碼混淆加密:1.asp混淆加密2.php混淆加密3.css/js混淆加密混淆加密5.ppencode6.rrencode7.jjencode/aaencode8.JSfuck9.jother10.brainfuck編程語言相關(guān)工具參考彩蛋0*02正文常見編碼1.ASCII編碼ASCII編碼大致可以分作三局部組成:第一局部是:ASCII非打印控制字符〔參詳ASCII碼表中0-31〕;第二局部是:ASCII打印字符,也就是CTF中常用到的轉(zhuǎn)換;第三局部是:擴展ASCII打印字符(第一第三局部詳見[ASCII碼表](.asciima./)解釋)。編碼轉(zhuǎn)換例如源文本:`Thequickbrownfo*jumpsoverthelazydog`ASCII編碼對應(yīng)十進制:對應(yīng)可以轉(zhuǎn)換成二進制,八進制,十六進制等。2.Base64/32/16編碼base64、base32、base16可以分別編碼轉(zhuǎn)化8位字節(jié)為6位、5位、4位。16,32,64分別表示用多少個字符來編碼,這里我注重介紹base64。Base64常用于在通常處理文本數(shù)據(jù)的場合,表示、傳輸、存儲一些二進制數(shù)據(jù)。包括MIME的email,emailviaMIME,在*ML中存儲復(fù)雜數(shù)據(jù)。編碼原理:Base64編碼要求把3個8位字節(jié)轉(zhuǎn)化為4個6位的字節(jié),之后在6位的前面補兩個0,形成8位一個字節(jié)的形式,6位2進制能表示的最大數(shù)是2的6次方是64,這也是為什么是64個字符(A-Z,a-z,0-9,+,/這64個編碼字符,=號不屬于編碼字符,而是填充字符)的原因,這樣就需要一映射表,如下:舉個例子(base64):>源文本:The>>對應(yīng)ascii碼:84104101>>8位binary:010101000110100001100101>>6位binary:010101000110100001100101>>高位補0:000010101000001100010000100100101>>對應(yīng)ascii碼:2163337>>查表:VGhl利用Pythonbase64模塊,我們分別可以這樣加密解密base643216:3.shellcode編碼源文本:`Thequickbrownfo*jumpsoverthelazydog`編碼后:\*54\*68\*65\*7f\*71\*75\*69\*63\*6b\*7f\*62\*72\*6f\*77\*6e\*7f\*66\*6f\*78\*7f\*6a\*75\*6d\*70\*73\*7f\*6f\*76\*65\*72\*7f\*74\*68\*65\*7f\*6c\*61\*7a\*79\*7f\*64\*6f\*674.Quoted-printable編碼它是多用途互聯(lián)網(wǎng)擴展〔MIME)一種實現(xiàn)方式。有時候我們可以頭里面能夠看到這樣的編碼,編碼原理[參考]()。源文本:`敏捷的棕色狐貍跳過了懶惰的狗`編碼后:=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編碼解碼[](.m*/tools/QuotedPrintable.asp*)5.**encode編碼**encode將輸入文本以每三個字節(jié)為單位進展編碼。如果最后剩下的資料少于三個字節(jié),不夠的部份用零補齊。這三個字節(jié)共有24個Bit,以6bit為單位分為4個組,每個組以十進制來表示所出現(xiàn)的數(shù)值只會落在0到63之間。以所對應(yīng)值的位置字符代替。它所選擇的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVW*YZabcdefghijklmnopqrstuvw*yz,一共64個字符。跟base64打印字符相比,就是UUencode多一個“-〞字符,少一個〞/〞字符。源文本:`Thequickbrownfo*jumpsoverthelazydog`編碼后:`hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FG-gMLdt64FjNkc+`編碼解碼[](/charset**encode)6.UUencode編碼UUencode是一種二進制到文字的編碼,最早在uni*系統(tǒng)中使用,全稱:Uni*-to-Uni*encoding,UUencode將輸入文本以每三個字節(jié)為單位進展編碼,如果最后剩下的資料少于三個字節(jié),不夠的部份用零補齊。三個字節(jié)共有24個Bit,以6-bit為單位分為4個組,每個組以十進制來表示所出現(xiàn)的字節(jié)的數(shù)值。這個數(shù)值只會落在0到63之間。然后將每個數(shù)加上32,所產(chǎn)生的結(jié)果剛好落在ASCII字符集中可打印字符〔32-空白…95-底線〕的圍之中。源文本:`Thequickbrownfo*jumpsoverthelazydog`編碼后:`M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9PH*`編碼解碼[]()7.URL編碼url編碼又叫百分號編碼,是統(tǒng)一資源定位(URL)編碼方式。URL地址〔常說網(wǎng)址〕規(guī)定了常用地數(shù)字,字母可以直接使用,另外一批作為特殊用戶字符也可以直接用〔/,:等〕,剩下的其它所有字符必須通過%**編碼處理。現(xiàn)在已經(jīng)成為一種規(guī)了,根本所有程序語言都有這種編碼,如js:有encodeURI、encodeURIponent,PHP有urlencode、urldecode等。編碼方法很簡單,在該字節(jié)ascii碼的的16進制字符前面加%.如空格字符,ascii碼是32,對應(yīng)16進制是'20',則urlencode編碼結(jié)果是:%20。源文本:`Thequickbrownfo*jumpsoverthelazydog`編碼后:%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編碼解碼[]()8.Unicode編碼Unicode編碼有以下四種編碼方式:源文本:`The`
&*[He*]:`&*0054;&*0068;&*0065;`
&[Decimal]:`&00084;&00104;&00101;`
\U[He*]:`\U0054\U0068\U0065`
\U+[He*]:`\U+0054\U+0068\U+0065`編碼解碼[](.m*/tools/Unicode.asp*)9.Escape/Unescape編碼Escape/Unescape加密解碼/編碼解碼,又叫%u編碼,采用UTF-16BE模式,Escape編碼/加密,就是字符對應(yīng)UTF-1616進制表示方式前面加%u。Unescape解碼/解密,就是去掉"%u"后,將16進制字符復(fù)原后,由utf-16轉(zhuǎn)碼到自己目標(biāo)字符。如:字符“中〞,UTF-16BE是:“6d93〞,因此Escape是“%u6d93〞。源文本:`The`編碼后:`%u0054%u0068%u0065`10.HTML實體編碼完整編碼手冊[參考](.w3school../tags/html_ref_entities.html)11.敲擊碼敲擊碼(Tapcode)是一種以非常簡單的方式對文本信息進展編碼的方法。因該編碼對信息通過使用一系列的點擊聲音來編碼而命名,敲擊碼是基于5×5方格波利比奧斯方陣來實現(xiàn)的,不同點是是用K字母被整合到C中。敲擊碼表:123451ABC/KDE2FGHIJ3LMNOP4QRSTU5VW*YZ12.莫爾斯電碼摩爾斯電碼(MorseCode)是由美國人薩繆爾·摩爾斯在1836年創(chuàng)造的一種時通時斷的且通過不同的排列順序來表達不同英文字母、數(shù)字和標(biāo)點符號的信號代碼,摩爾斯電碼主要由以下5種它的代碼組成:1.點〔.〕2.劃〔-〕3.每個字符間短的停頓〔通常用空格表示停頓〕4.每個詞之間中等的停頓〔通常用`/`劃分〕5.以及句子之間長的停頓摩爾斯電碼字母和數(shù)字對應(yīng)表:A.-N-...-.-.-+.-.-.1.B-...O,--..--_..--.-2..C-.-.P.--.:...$...-..-3...--D-..Q--.-".-..-.&.-...4-E.R.-.'../-..-.5F..-.S...!-.-.--6-G--.T-"..--..7--...HU..-.--.-.8..I..V...----9.J.W.--;-.-.-.0K-.-*-..-(-.--.L.-..Y-.--)-.--.-M--Z--..=-...-源文本:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`編碼后:-./--.-..-..-.-.-.-/-....-..---./..-.-..-/...---.--..../...-..-./-./.-...---..-.--/-..--.在線編碼解碼[傳送門](rumkin./tools/cipher/morse.php)摩爾斯電碼除了能對字母數(shù)字編碼以外還對一些標(biāo)點符號,非英語字符進展了編碼,而且還有一些特定意義的組合稱為特殊符號,比方`·-·-·-·-·-`表達的意思是調(diào)用信號,表示“我有消息發(fā)送〞。如果你感興趣可以參考[WiKi]()。13.編碼的故事推薦大家去看[編碼的故事](wenku.baidu./link"url=kTrscV5j5AsZq5zvBpr2jdkEJW8LqgrkkKsddwWA3Yl*mgeqh_be95nM*qbFPOYoVBVy3A6lutlc*VDYLdZ-3iRawJpc0VZ71as07Fn*tGS)一文。各種文本加密文本加密可以將正常文本容打亂為不可連讀的文字或符號(漢字數(shù)字字母音樂符號國際音標(biāo)盲文文日文傣文彝文箭頭符號花朵符號俄文),換行等格式信息也會被去除,到達加密的作用。在進展文本加密時可以設(shè)定一個密碼,這樣只有知道密碼的人才能解密文本。密碼可以是數(shù)字、字母和下劃線,最多九位。加密例如:源文本:`敏捷的棕色狐貍跳過了懶惰的狗`編碼解碼[](.qq*iuzi./bianma/wenbenjiami.php)換位加密1.柵欄密碼**〔1〕介紹**柵欄密碼(Rail-fenceCipher)就是把要加密的明文分成N個一組,然后把每組的第1個字符組合,每組第2個字符組合...每組的第N(最后一個分組可能缺乏N個)個字符組合,最后把他們?nèi)窟B接起來就是密文,這里以2欄柵欄加密為例。明文:`Thequickbrownfo*jumpsoverthelazydog`去空格:`Thequickbrownfo*jumpsoverthelazydog`分組:`Thequickbrownfo*jumpsoverthelazydog`第一組:`Teucbonojmsvrhlzdg`第二組:`hqikrwf*upoeteayo`密文:`Teucbonojmsvrhlzdghqikrwf*upoeteayo`加解密[傳送門](.practicalcryptography./ciphers/classical-era/rail-fence/)2.曲路密碼曲路密碼(CurveCipher)是一種換位密碼,需要事先雙方約定密鑰(也就是曲路路徑)。明文:`Thequickbrownfo*jumpsoverthelazydog`填入5行7列表(事先約定填充的行列數(shù))加密的回路線(事先約定填充的行列數(shù))密文:`gesfcinphodtmwuqouryzejrehb*valookT`3.列移位密碼**〔1〕介紹**列移位密碼(ColumnarTranspositionCipher)是一種比擬簡單,易于實現(xiàn)的換位密碼,通過一個簡單的規(guī)則將明文打亂混合成密文。下面我們以明文Thequickbrownfo*jumpsoverthelazydog,密鑰howareu為例:填入5行7列表(事先約定填充的行列數(shù),如果明文不能填充完表格可以約定使用*個字母進展填充)密鑰:`howareu`按howareu在字母表中的出現(xiàn)的先后順序進展編號,我們就有a為1,e為2,h為3,o為4,r為5,u為6,w為7,所以先寫出a列,其次e列,以此類推寫出的結(jié)果便是密文:密文:`qouryinphoTkoolhb*vauwmtdcfsegerjez`這里提供一個行列數(shù)相等的填充規(guī)則列移位密碼加解密[](.practicalcryptography./ciphers/classical-era/columnar-transposition/)另外由列移位密碼變化來的密碼也有其他的,比方[Amsco密碼](.thonky./kryptos/amsco-cipher)(AmscoCipher)和[Cadenus密碼](.thonky./kryptos/cadenus-cipher)(CadenusCipher)。替換加密1.埃特巴什碼**〔1〕介紹**埃特巴什碼(AtbashCipher)是一種以字母倒序排列作為特殊密鑰的替換加密,也就是下面的對應(yīng)關(guān)系:ABCDEFGHIJKLMNOPQRSTUVW*YZZY*WVUTSRQPONMLKJIHGFEDCBA明文:`thequickbrownfo*jumpsoverthelazydog`密文:`gsvjfr*pyildmulcqfnkhlevigsvozabwlt`加解密[傳送門](.practicalcryptography./ciphers/classical-era/atbash-cipher/)2.凱撒密碼**〔1〕介紹**凱撒密碼(CaesarCipher或稱愷撒加密、愷撒變換、變換加密、位移加密)是一種替換加密,明文中的所有字母都在字母表上向后〔或向前〕按照一個固定數(shù)目進展偏移后被替換成密文。例,當(dāng)偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推,更多[參考]()。加密實例:明文:`Thequickbrownfo*jumpsoverthelazydog`偏移量:1密文:`Uifrvjdlcsp*ogpykvnqtpwfsuifmbazeph`你也可以使用Python的pycipher模塊來加解密,如果提示沒有這個模塊可以通過`pipinstallpycipher`或者其他方式來安裝pycipher模塊。>>>frompycipherimportCaesar>>>Caesar(key=1).encipher('Thequickbrownfo*jumpsoverthelazydog')'UIFRVJDLCSP*OGPYKVNQTPWFSUIFMBAZEPH'>>>Caesar(key=1).decipher('UIFRVJDLCSP*OGPYKVNQTPWFSUIFMBAZEPH')'THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG'參考表(這里是向后移位加密,向前移位解密):加密解密[](planetcalc./1434/)(這個可以將26種情況一次性列舉出來,比擬方便)3.ROT5/13/18/47**〔1〕介紹**ROT5/13/18/47是一種簡單的碼元位置順序替換暗碼。此類編碼具有可逆性,可以自我解密,主要用于應(yīng)對快速瀏覽,或者是機器的讀取。>ROT5是rotateby5places的簡寫,意思是旋轉(zhuǎn)5個位置,其它皆同。下面分別說說它們的編碼方式:>>ROT5:只對數(shù)字進展編碼,用當(dāng)前數(shù)字往前數(shù)的第5個數(shù)字替換當(dāng)前數(shù)字,例如當(dāng)前為0,編碼后變成5,當(dāng)前為1,編碼后變成6,以此類推順序循環(huán)。>>ROT13:只對字母進展編碼,用當(dāng)前字母往前數(shù)的第13個字母替換當(dāng)前字母,例如當(dāng)前為A,編碼后變成N,當(dāng)前為B,編碼后變成O,以此類推順序循環(huán)。>>ROT18:這是一個異類,本來沒有,它是將ROT5和ROT13組合在一起,為了好稱呼,將其命名為ROT18。>>ROT47:對數(shù)字、字母、常用符號進展編碼,按照它們的ASCII值進展位置替換,用當(dāng)前字符ASCII值往前數(shù)的第47位對應(yīng)字符替換當(dāng)前字符,例如當(dāng)前為小寫字母z,編碼后變成大寫字母K,當(dāng)前為數(shù)字0,編碼后變成符號_。用于ROT47編碼的字符其ASCII值圍是33-126,具體可參考ASCII編碼,下面以rot13以例。明文:`thequickbrownfo*jumpsoverthelazydog`密文:`gurdhvp*oebjasbkwhzcfbiregurynmlqbt`[傳送門](.qq*iuzi./bianma/ROT5-13-18-47.php)4.簡單替換密碼**〔1〕介紹**簡單換位密碼(SimpleSubstitutionCipher)加密方式是以每個明文字母被與之唯一對應(yīng)且不同的字母替換的方式實現(xiàn)的,它不同于愷撒密碼,因為密碼字母表的字母不是簡單的移位,而是完全是混亂的。比方:明文字母:abcdefghijklmnopqrstuvw*yz明文字母:phqgiumeaylnofd*jkrcvstzwb明文:`thequickbrownfo*jumpsoverthelazydog`密文:`ceijvaqlhkdtfudzyvo*rdsikceinpbwgdm`**〔2〕破解**當(dāng)密文數(shù)據(jù)足夠多時這種密碼我們可以通過字頻分析方法破解或其他方法破解,比擬好的在線詞頻分析[quipqiup./inde*.php](quipqiup./inde*.php)(翻==墻),這里推薦一篇通過"爬山算法"來破解簡單替換密碼[文章](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-simple-substitution-cipher/),基于文中的算法實現(xiàn)的工具來破解例如。密文:pmpaf*aikkitprdsikcplifhwceigi*kirradfeirdgkipgigudkcekiigpwrpucikceiginasikwduearr*iiqepcceindgmieinpwdfprduppcedoikiqiasafmfddfipfgmdafmfdteiki解密:(ps:score值越小越準確)密鑰:`PHQGIUMEAVLNOFD*BKRCZSTJWY`明文:AGAINPIERREWASOVERTAKENBYTHEDEPRESSIONHESODREADEDFORTHREEDAYSAFTERTHEDELIVERYOFHISSPEECHATTHELODGEHELAYONASOFAATHOMERECEIVINGNOONEANDGOINGNOWHERE將明文轉(zhuǎn)換成可讀句子:againpierrewasovertakenbythedepressionhesodreadedforthreedaysafterthedeliveryofhisspeechatthelodgehelayonasofaathomereceivingnooneandgoingnowhere5.希爾密碼**〔1〕介紹**希爾密碼(HillCipher)是基于線性代數(shù)多重代換密碼,由LesterS.Hill在1929年創(chuàng)造。每個字母轉(zhuǎn)換成26進制數(shù)字:A=0,B=1,C=2...Z=25一串字母當(dāng)成n維向量,跟一個n×n的矩陣相乘,再將得出的結(jié)果MOD26。更多[參考]()**〔2〕加密**明文:`ACT`明文對應(yīng)矩陣:加密密鑰:`GYBNQKURP`加密矩陣:計算過程:密文:`FIN`**〔3〕解密**密文:`FIN`計算加密矩陣的逆矩陣:解密計算:明文:`ACT`至于證明和求逆可以參考線性代數(shù)知識。**〔4〕破解**密碼分析一門破解編碼和密碼的藝術(shù)。當(dāng)我們嘗試去攻破希爾密碼你會發(fā)現(xiàn)頻率分析實際上沒有什么用處,特別在密鑰長度增多的情況下。對于較長的二元矩陣〔2×2的希爾密碼〕頻率分析可能可能會有幫助,但是對于較短的密文分析是沒有實際作用的。這里推薦一篇關(guān)于用[明文樣本攻擊的方式破解希爾密碼](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-hill-cipher/)的文章,根底的希爾密碼用[明文攻擊](s:///wiki/Known-plainte*t_attack)的方式是可攻破的,由于加密完全是線性的,所以攻擊者在截取到局部明文/密文字符對可以輕松建立一個線性系統(tǒng),輕松搞定希爾密碼,如果不能完全確定線性系統(tǒng),則只需要添加局部明文/密文對即可。明文攻擊時最好的方式去破解寫入密碼,如果明文一無所知,那就進展推測猜出局部明文。基于明文樣本攻擊的方式破解希爾密碼的算法的實現(xiàn)工具破解例如:密文:*UKE*WSLZJUA*UNKIGWFSOZRAWURORK*AOSLHROB*BTKCMUWDVPTFBLMKEFVWMU*TVTWUIDDJVZKBRMCWOIWYD*MLUFPVSHAGSVWUFWORCWUIDUJVTTBERTUNOJUZHVTWKORSVRZSVVFSQ*OCMUWPYTRLGBMCYPOJCLRIYTVFCCMUWUFPO*MCIWMSKP*EDLYIQKDJWIWCJUMVRCJUMVRK*WURKPSEEIWZV*ULEIOETOOFWKBIU*P*UGOWLFPWUSCH解密:解密[腳本實例](bobao.360./ctf/learning/136.html)在線加解密[傳送門](.practicalcryptography./ciphers/hill-cipher/)6.豬圈密碼**〔1〕介紹**豬圈密碼(PigpenCipher或稱九宮格密碼、朱高密碼、共濟會密碼或共濟會員密碼),是一種以格子為根底的簡單替代式密碼。更多[參考]()明文字母和對應(yīng)密文:明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`密文:在線加密[傳送門](./The_Black_Chamber/pigpen.html)**〔2〕變種**圣堂武士密碼(TemplarCipher)是共濟會的“豬圈密碼〞的一個變種,一直被共濟會圣殿騎士用。明文字母和對應(yīng)密文:**〔3〕其他變種**明文字母和對應(yīng)密文:明文字母和對應(yīng)密文:明文字母和對應(yīng)密文:7.波利比奧斯方陣密碼**〔1〕介紹**波利比奧斯方陣密碼〔PolybiusSquareCipher或稱波利比奧斯棋盤〕是棋盤密碼的一種,是利用波利比奧斯方陣進展加密的密碼方式,簡單的來說就是把字母排列好,用坐標(biāo)(行列)的形式表現(xiàn)出來。字母是密文,明文便是字母的坐標(biāo)。更多[參考]()常見的排布方式:加密實例:明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`密文:`44231541452413251242345233213453244532354344231531115554143422`8.夏多密碼(曲折加密)**〔1〕介紹**夏多密碼是作者麥克斯韋·格蘭特在中篇小說"死亡之鏈"塑造夏多這一英雄人物中所自創(chuàng)的密碼,如下列圖所示:>注意,在以上所示的字母表密鑰的底部,列有四個附加符號1,2,3,4.他們可以放在密文中的任何地方。每個附加符號指示,如何轉(zhuǎn)動寫有密文的紙,再進展后續(xù)的加密或解密操作,直到出現(xiàn)另一個附加符號??梢园衙總€附加符號中的那根線看作是指示針,它指示了紙的上端朝上,朝右,朝下,朝左。比方說:如果出現(xiàn)符號3,則紙就應(yīng)該轉(zhuǎn)動180度,使其上端朝下;>符號2表示紙上端朝右,依次類推。源文本:`IAMINDANGERSENDHELP(我有危險,速來增援)`密文:9.普萊菲爾密碼普萊菲爾密碼(PlayfairCipher)是第一種用于實際的雙字替換密碼,用雙字加密取代了簡單代換密碼的單字加密,很明顯這樣使得密文更難破譯,因為使用簡單替換密碼的頻率分析根本沒有什么作用,雖然頻率分析,通常仍然可以進展,但是有25×25=625種可能而不是25種可能,可以分為三個步驟,即編制密碼表、整理明文、編寫譯文,下面我們以明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`和密鑰`CULTURE`為例來講解。普萊菲爾密碼又稱為單方密碼(SingleCipher)之后又出現(xiàn)它的升級版DoublePlayfair,也就是[二方密碼]()(Two-squareCipher),在之后又有四方密碼(Four-squareCipher)**(1)編制密碼表**1.整理密鑰字母`CULTURE`,去掉后面重復(fù)的字母得到:`CULTRE`2.用上一步得到的字母自上而下來填補5乘5方表的縱列〔也可橫排〕,之后的空白按照一樣的順序用字母表中剩余的字母依次填補完整,得到如下的方格:>這一步需要注意的要點:整理密鑰字母時,如果出現(xiàn)"Z",則需要去除,因為在英文里"Z"的使用頻率最低,相應(yīng)的如果是德文,則需將"I"與"J"當(dāng)作一個字母來對待,而法語則去掉"W"或"K"。**(2)整理明文**我們要遵循的原則是“兩個一組〞,得到是假設(shè)干個兩兩成對的字母段,用到的是明文`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`與字母"`*`":1.將明文兩兩一組按順序排開,得到:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`2.對于末尾的單個字母要加上一個"`*`"使之成對:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG*`>這一步需要注意的要點:對于相連字母一樣者,每個后面都需要加"`*`",例如`TOMORROW`,需要寫成:`TOMOR*R*OW`。**(3)編寫密文**我們要得到的密文,當(dāng)然,對于每個字母對,要嚴格遵循如下的原則:>1.如果兩個字母在同一行則要用它右鄰的字母替換,如果已在最右邊,則用該行最左邊的替換,如明文為"`CE`",依據(jù)上表,應(yīng)替換為"`EG`";>2.如果兩個字母在同一列則要用它下邊的字母替換,如果已在最下邊,則用該行最上邊的替換,如明文為"`OQ`",依據(jù)上表,應(yīng)替換為"`PS`";>3.如果兩個字母在不同的行或列,則應(yīng)在密碼表中找兩個字母使四個字母組成一個矩形,明文占據(jù)兩個頂點,需用另外兩個頂點的字母替換,如明文為"`H*`",可以替換為"`WI/J`"或"`I/JW`"〔下面的例子將按照橫向替換原則即同行優(yōu)先〕。按照上述原則,將明文`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG*`加以轉(zhuǎn)換得到`KUNDLHGTLFWUESPWLHSI/JNPCGCRAGBUVZQAI/JV`〔/表示或者,不過一般用I不用J,所以分析密文時你看25個字母都有而只差一個字母沒有用到可以考慮一下這種加密方式〕將得到的字母改為大寫并五個一組列好,得到密文`KUNDLHGTLFWUESPWLHSINPCGCRAGBUVZQAIV`。加密解密[傳送門](.practicalcryptography./ciphers/classical-era/playfair/)(ps:這里加解密是橫向編制密碼表)加密解密實例(ps:這里加解密也是橫向編制密碼表):>>>frompycipherimportPlayfair>>>Playfair('CULTREABDFGHIKMNOPQSVW*YZ').encipher('THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG')'UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV'>>>Playfair('CULTREABDFGHIKMNOPQSVW*YZ').decipher('UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV')'THEQUICKBROWNFO*IUMPSOVERTHELAZYDOG*'10.維吉尼亞密碼**〔1〕介紹**維吉尼亞密碼(VigenèreCipher)是在單一愷撒密碼的根底上擴展出多表代換密碼,根據(jù)密鑰(當(dāng)密鑰長度小于明文長度時可以循環(huán)使用)來決定用哪一行的密表來進展替換,以此來對抗字頻統(tǒng)計,更多[參考]()。密表:明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`密鑰(循環(huán)使用,密鑰越長相對破解難度越大):`CULTURE`加密過程:如果第一行為明文字母,第一列為密鑰字母,則明文字母'T'列和密鑰字母'C'行的交點就是密文字母'V',以此類推。密文:`VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKR*FK`**〔2〕密鑰加解密**>>>frompycipherimportVigenere>>>Vigenere('CULTURE').encipher('THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG')'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKR*FK'>>>Vigenere('CULTURE').decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKR*FK')'THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG'在線加密解密[傳送門](planetcalc./2468/)**〔3〕未知密鑰破解**可以參考[維吉尼亞密碼分析](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher/)這篇文章,破解維吉尼亞密碼第一步是確定密鑰長度,維吉尼亞密碼分析這篇文章里介紹了使用[重合指數(shù)](s:///wiki/Inde*_of_coincidence)算法來確定密鑰長度,在確定密鑰長度后就可以嘗試確定密鑰,通常我們可以使用[卡方檢驗]()來找到每個字母的偏移量,基于維吉尼亞密碼分析一文中的算法實現(xiàn)的工具破解例如。密文:`kiqpbk*spshwehospzqhoinlgapp`解密:(ps:結(jié)合左邊的值,密鑰以及解出明文可以確定kien5或者klen10為準確的結(jié)果)明文:`DEFENDTHEEASTWALLOFTHECASTLE`**〔4〕變種**有幾種密碼和維吉尼亞密碼相似,格羅斯費爾德密碼(Gronsfeldcipher)實際上和維吉尼亞密碼一樣,除了使用了數(shù)字來代替字母以外沒有什么區(qū)別。數(shù)字可以選擇一種數(shù)列,如斐波那契數(shù)列,或者一些其他的偽隨機序列。格羅斯費爾德密碼密碼分析過程和維吉尼亞密碼小異,不過,自動密鑰密碼不能使用[卡西斯基算法](.zybang./question/a0a1108423f63d10dbbf0c3e1bfdf3b3.html)(kasiski)來破譯,因為自動密鑰密碼的密鑰不重復(fù)循環(huán)使用,破譯自動密鑰密碼最好的方法的就是從密文不斷嘗試和猜想其中明文或密鑰的一局部。>>>frompycipherimportGronsfeld>>>Gronsfeld([2,20,11,45,20,43,4]).encipher('THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG')VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKR*FK'>>>Gronsfeld([2,20,11,45,20,43,4]).decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKR*FK')THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG'在線加解密[傳送門](rumkin./tools/cipher/gronsfeld.php)11.自動密鑰密碼**〔1〕介紹**自動密鑰密碼(AutokeyCipher)是多表替換密碼,與維吉尼亞密碼密切相關(guān),但使用不同的方法生成密鑰,通常來說要比維吉尼亞密碼更平安。自動密鑰密碼主要有兩種,關(guān)鍵詞自動密鑰密碼和原文自動密鑰密碼.下面我們以關(guān)鍵詞自動密鑰為例:明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`關(guān)鍵詞:`CULTURE`自動生成密鑰:`CULTURETHEQUICKBROWNFO*JUMPSOVERTHE`接下來的加密過程和維吉尼亞密碼類似,從密表可得:密文:`VBPJOZGDIVEQVHYYAIIC*CSNLFWWZVDPWVK`**〔2〕關(guān)鍵詞加解密**>>>frompycipherimportAutokey>>>Autokey('CULTURE').encipher('THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG')'VBPJOZGDIVEQVHYYAIIC*CSNLFWWZVDPWVK'>>>Autokey('CULTURE').decipher('VBPJOZGDIVEQVHYYAIIC*CSNLFWWZVDPWVK')'THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG'在線加解密[傳送門](.practicalcryptography./ciphers/classical-era/autokey/)**〔3〕未知關(guān)鍵詞破解**推薦去看這篇[自動密鑰密碼分析文章](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-autokey-cipher/),基于文中的算法實現(xiàn)的工具來破解例如。密文:isjiqymdebvuzrvwhmvysibugzhyinmiyeiklcvioimbninyksmmnjmgalvimlhspj*mgfiraqlhjcpvolqmnyynhpdeto*emgno*l解密(ps:從klen13可以看出使用的關(guān)鍵詞為'FORTIFICATION')明文:DESPITEBEINGMORESECURETHANTHEVIGENERECIPHERTHEAUTOKEYCIPHERISSTILLVERYEASYTOBREAKUSINGAUTOMATEDMETHODS將明文轉(zhuǎn)換成可讀句子:despitebeingmoresecurethanthevigenereciphertheautokeycipherisstillveryeasytobreakusingautomatedmethods12.博福特密碼**〔1〕介紹**博福特密碼(BeaufortCipher),是一種類似于維吉尼亞密碼的代換密碼,由弗朗西斯·蒲福(FrancisBeaufort)創(chuàng)造。它最知名的應(yīng)用是HagelinM-209密碼機。博福特密碼屬于對等加密,即加密演算法與解密演算法一樣。明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`密鑰(循環(huán)使用,密鑰越長相對破解難度越大):`CULTURE`加密過程:如果第一行為明文字母,第一列為密文字母,則沿明文字母'T'列出現(xiàn)密鑰字母'C'的行號就是密文字母'J',以此類推。密文:`JNHDAJCSTUFYEZO*CZICMOZHCBKARUMVRDY`**〔2〕密鑰加解密**>>>frompycipherimportBeaufort>>>Beaufort('CULTURE').encipher('THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG')'JNHDAJCSTUFYEZO*CZICMOZHCBKARUMVRDY'>>>Beaufort('CULTURE').decipher('JNHDAJCSTUFYEZO*CZICMOZHCBKARUMVRDY')'THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG'在線加解密[傳送門](.practicalcryptography./ciphers/classical-era/beaufort/)13.滾動密鑰密碼**〔1〕介紹**滾動密鑰密碼(RunningKeyCipher)和維吉尼亞密碼有著一樣的加密機制,區(qū)別是密鑰的選取,維吉尼亞使用的密鑰簡短,而且重復(fù)循環(huán)使用,與之相反,滾動密鑰密碼使用很長的密鑰,比方引用一本書作為密鑰。這樣做的目的是不重復(fù)循環(huán)使用密鑰,使密文更難破譯,盡管如此,滾動密鑰密碼還是可以被攻破,因為有關(guān)于密鑰和明文的統(tǒng)計分析模式可供利用,如果滾動密鑰密碼使用統(tǒng)計上的隨鑰來源,則理論上是不可破譯的,因為任何可能都可以成為密鑰,并且所有的可能性都是相等的。明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`密鑰:選取C語言編程(1978版)第63頁第1行"errorscanoccurinseveralplaces.Alabelhas...",去掉非字母局部作為密鑰(實際選取的密鑰很長,長度至少不小于明文長度)。加密過程:加密過程和維吉尼亞密碼加密過程一樣密文:`*YVELAEKOFQYHWWKBYHTJOGTCTJIDAKYESR`密鑰在線加解密[傳送門](.practicalcryptography./ciphers/classical-era/running-key/)14.Porta密碼**〔1〕介紹**Porta密碼(PortaCipher)是一個由意大利那不勒斯的醫(yī)生GiovanniBattistadellaPorta創(chuàng)造的多表代換密碼,Porta密碼具有加密解密過程的是一樣的特點。密表:KEYS|ABCDEFGHIJKLMNOPQRSTUVW*YZ|A,B|NOPQRSTUVW*YZABCDEFGHIJKLMC,D|OPQRSTUVW*YZNMABCDEFGHIJKLE,F|PQRSTUVW*YZNOLMABCDEFGHIJKG,H|QRSTUVW*YZNOPKLMABCDEFGHIJI,J|RSTUVW*YZNOPQJKLMABCDEFGHIK,L|STUVW*YZNOPQRIJKLMABCDEFGHM,N|TUVW*YZNOPQRSHIJKLMABCDEFGO,P|UVW*YZNOPQRSTGHIJKLMABCDEFQ,R|VW*YZNOPQRSTUFGHIJKLMABCDES,T|W*YZNOPQRSTUVEFGHIJKLMABCDU,V|*YZNOPQRSTUVWDEFGHIJKLMABCW,*|YZNOPQRSTUVW*CDEFGHIJKLMABY,Z|ZNOPQRSTUVW*YBCDEFGHIJKLMA明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`密鑰(循環(huán)使用,密鑰越長相對破解難度越大):`CULTURE`加密過程:明文字母'T'列與密鑰字母'C'行交點就是密文字母'F',以此類推。密文:`FRWHKQRYYMFMFUAAOLWHDALWIJPTZ*HCNGV`密鑰在線加解密[傳送門](.practicalcryptography./ciphers/classical-era/porta/)**〔2〕破解**Porta密碼可以被以[維吉尼亞密碼](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher-part-2/)破解相類似方式進展自動攻破,破解Porta密碼第一步是先確定密鑰長度,這里推薦一篇關(guān)于使用[重合指數(shù)算法](s:///wiki/Inde*_of_coincidence)確定為維吉尼亞密鑰長度[文章](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher/)。15.同音替換密碼**〔1〕介紹**同音替換密碼(HomophonicSubstitutionCipher)是單字母可以被其他幾種密文字母同時替換的密碼,通常要比標(biāo)準替換密碼破解更加困難,破解標(biāo)準替換密碼最簡單的方法就是分析字母出現(xiàn)頻率,通常在英語中字母'E'(或'T')出現(xiàn)的頻率是最高的,如果我們允許字母'E'可以同時被3種不同字符代替,則就不能還是以普通字母的頻率來分析破解,如果允許可代替字符越多,則密文就會更難破譯。常見代換規(guī)則表:明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`密文(其中一種):`6CZKOVST*J0MAEQYIOGL40W1JUC7P9NBF0H`**〔2〕破解**如果同音替換密碼的同音詞個數(shù)很多,則破解它難度很大,通常的方法采取類似破解替換密碼的"爬山算法",除了找到一個明文字母映射幾個字符之外,我們還需要確定映射了那些字符,可以嘗試[2層嵌套"爬山算法"]()來破解,外層確定映射的數(shù)量,層確定映射字符。16.仿射密碼**〔1〕介紹**仿射密碼(AffineCipher)是一種單表代換密碼,字母表中的每個字母相應(yīng)的值使用一個簡單的數(shù)學(xué)函數(shù)映射到對應(yīng)的數(shù)值,再把對應(yīng)數(shù)值轉(zhuǎn)換成字母。這個公式意味著每個字母加密都會返回一個一樣的字母,意義著這種加密方式本質(zhì)上是一種標(biāo)準替代密碼。因此,它具有所有替代密碼的弱點。每一個字母都是通過函數(shù)〔a*+b〕modm加密,其中B是位移量,為了保證仿射密碼的可逆性,a和m需要滿足gcd(a,m)=1,一般m為設(shè)置為26。更多[參考]()常見的字母對應(yīng)關(guān)系:下面我們以E(*)=(5*+8)mod26函數(shù)為例子至于解密我們知道即可得出解密結(jié)果以E(*)=(5*+8)mod26加密,通過計算可得D(*)=21(*-8)mod26,這樣便可以得到明文。可參考的Python腳本加解密[傳送門](.practicalcryptography./ciphers/classical-era/affine/)17.培根密碼**〔1〕介紹**培根密碼(BaconianCipher)是一種替換密碼,每個明文字母被一個由5字符組成的序列替換,最初的加密方式就是由'A'和'B'組成序列替換明文(所以你當(dāng)然也可以用別的字母),比方字母'D'替換成"aaabb",以下是全部的對應(yīng)關(guān)系(另一種對于關(guān)系是每個字母都有唯一對應(yīng)序列,I和J與U/V各自都有不同對應(yīng)序列):A=aaaaaI/J=abaaaR=baaaaB=aaaabK=abaabS=baaabC=aaabaL=ababaT=baabaD=aaabbM=ababbU/V=baabbE=aabaaN=abbaaW=babaaF=aababO=abbab*=bababG=aabbaP=abbbaY=babbaH=aabbbQ=abbbbZ=babbb明文:`THEFO*`密文:`baabaaabbbaabaaaabababbabbabab`加解密[傳送門](rumkin./tools/cipher/baconian.php)18.ADFG*和ADFGV*密碼**〔1〕ADFG*密碼**ADFG*密碼(ADFG*Cipher)是結(jié)合了改進過的Polybius方格替代密碼與單行換位密碼的矩陣加密密碼,使用了5個合理的密文字母:A,D,F(xiàn),G,*,這些字母之所以這樣選擇是因為當(dāng)轉(zhuǎn)譯成摩爾斯電碼(ADFG*密碼是德國軍隊在一戰(zhàn)創(chuàng)造使用的密碼)不易混淆,目的是盡可能減少轉(zhuǎn)譯過程的操作錯誤。加密矩陣例如:ADFG*A|phqgmD|eaynoF|fd*krG|cvszw*|buti/jl明文:`THEQUICKBROWNFO*`結(jié)果矩陣加密:*FADDAAF*D*GGAFG*AF*D*G*DGFAD*FF列移位密鑰:`howareu`密文:`D*ADFAG*F*FF*DF*GG*DGFGAADAAD**F`密鑰加解密:>>>frompycipherimportADFG*>>>a=ADFG*('phqgmeaynofd*krcvszwbutil','HOWAREU')>>>a.encipher('THEQUICKBROWNFO*')'D*ADFAG*F*FF*DF*GG*DGFGAADAAD**F'>>>a.decipher('D*ADFAG*F*FF*DF*GG*DGFGAADAAD**F')'THEQUICKBROWNFO*'在線加解密[傳送門](.practicalcryptography./ciphers/adfg*-cipher/)**〔2〕ADFGV*密碼**ADFGV*密碼實際上就是ADFG*密碼的擴大升級版,一樣具有ADFG*密碼一樣的特點,加密過程也類似,不同的是密文字母增加了V,使得可以再使用10數(shù)字來替換明文。ADFGV*A|ph0qg6D|4mea1yF|l2nofdG|*kr3cvV|s5zw7b*|j9uti8由于兩種加密過程完全類似這里就不再重復(fù)給出加密過程。>>>frompycipherimportADFGV*>>>a=ADFGV*('ph0qg64mea1yl2nofd*kr3cvs5zw7bj9uti8','HOWAREU')>>>a.encipher('THEQUICKBROWNFO*')'D**FAFGFF*GGGFG*DVGDVGFAVFVAFVGG'>>>a.decipher('D**FAFGFF*GGGFG*DVGDVGFAVFVAFVGG')'THEQUICKBROWNFO*'19.雙密碼**〔1〕雙密碼**雙密碼(BifidCipher)結(jié)合了波利比奧斯方陣換位密碼,并采用分級實現(xiàn)擴散,這里的“雙〞是指用2個密鑰進展加密。雙密碼是由法國Feli*Delastelle創(chuàng)造,除此之外Feli*Delastelle還創(chuàng)造了三分密碼(TrifidCipher),四方密碼(Four-SquareCipher)。還有一個[兩方密碼]()(Two-Square)與四方密碼類似,[共軛矩陣雙密碼](.thonky./kryptos/cm-bifid-cipher)(ConjugatedMatri*BifidCipher)也是雙密碼的變種。例如密陣:123451|phqgm2|eayln3|ofd*k4|rcvsz5|wbuti/j明文:`THEQUICKBROWNFO*`經(jīng)過密陣轉(zhuǎn)換:行:`5121554354352333`列:`4213352521115214`分組:`5121554354352333``4213352521115214`合并:51215421335435452521352331152134在經(jīng)過密陣轉(zhuǎn)換后密文:`WETEDTKZNEKYOME*`**〔2〕密陣加解密**>>>frompycipherimport>>>Bifid('phqgmeaylnofd*krcvszwbuti',5).encipher('THEQUICKBROWNFO*')'WETEDTKZNEKYOME*'>>>Bifid('phqgmeaylnofd*krcvszwbuti',5).decipher('WETEDTKZNEKYOME*')'THEQUICKBROWNFO*'在線加解密[傳送門](.practicalcryptography./ciphers/classical-era/bifid/)**〔3〕未知密陣破解**手工分析破解雙密碼是有一定難度的,每個字母都是同過3個數(shù)字進展非線性代替轉(zhuǎn)換,而且之后還會對字母順序進展打亂,這樣使雙密碼比一些替換密碼和換位密碼更難破解。然而,現(xiàn)在是計算機時代,這加密方式?jīng)]有平安性可言,通過[模擬退火](baike.baidu./link"url=mkceUr0W4L7B7UVQ*c-dUk*KPj9v4YyBh_hrskt5i*k99UdnjW6mZ_Y*oJO1PkT1zdjEZD2hd7TCMiS*pOma)算法就能快速找到雙密碼的密陣。這里推薦一篇詳細的[雙密碼破解分析](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-bifid-cipher/)的文章,基于模擬退火算法實現(xiàn)的工具破解例如:密文:KWTAZQLAWWZCPONIVBTTBVQUZUGRNHAYIYGIAAYURCUQLDFTYVHTNQEENUPAIFCUNQTNGITEFUSHFDWHRIFSVTBISYDHHASQSROMUEVPQHHCCRBYTQBHWYRRHTEPEKHOBFSZUQBTSYRSQUDCSAOVUUG*OAUYWHPGAYHDNKEZPFKKWRIEHDWPEIOTBKESYETPBPOGTHQSPUMDOVUEQAUPCPFCQHRPHSOPQRSSLPEVWNIQDIOTSQESDHURIEREN解密:得到加密矩陣:GBCMKDHUETLVYWI*OZSPNFARQ明文:CRYPTANALYSISOFBIFIDBYHANDISACTUALLYFAIRLYDIFFICULTTHEFRACTIONATINGNATUREOFTHECIPHERIEEACHLETTERISSUBSTITUTEDBYCHARACTERSTHENTHESECHARACTERSAREIUMBLEDWHICHWILLPULLTHEMAPARTMAKESTHECIPHERMUCHSTRONGERTHANSUBSTITUTIONCIPHERSORTRANSPOSITIONCIPHERSONTHEIROWN20.三分密碼三分密碼(TrifidCipher)結(jié)合換位和替換,三分密碼與雙密碼非常相似,差異之處就是用除了3×3×3的密陣代替5×5密陣。例如密陣:密陣順序=EPSDUCVWYM.ZLK*NBTFGORIJHAQ方陣1方陣2方陣31231231231EPS1M.Z1FGO2DUC2LK*2RIJ3VWY3NBT3HAQ明文:`THEQUICKBROWNFO*.`經(jīng)過密陣轉(zhuǎn)換:THEQUICKBROWNFO*.231313122331233223313222232133112131132232213211332T(233)表示T在第一個方陣第三行第三列的位置分組(分組密鑰以5為例):THEQUICKBROWNFO*.231313122331233223313222232133112131132232213211332合并:231313313231132312232223223221312331331132113222132在經(jīng)過密陣轉(zhuǎn)換后密文:NOONWGB**LGHHWSKW想要深入了解三分密碼并破解三分密碼的小伙伴推薦去看LANIKI教授的一篇密碼課程章節(jié)的[講義]()。21.四方密碼**〔1〕介紹**四方密碼(Four-SquareCipher)是類似普萊菲爾密碼雙字母加密密碼,這樣使加密效果強于其他替換密碼,因為頻率分析變得更加困難了。四方密碼使用4個預(yù)先設(shè)置的5×5字母矩陣,每個矩陣包括25個字母,通常字母'j'被融入到'i'中(維基百科上說'q'被忽略,不過這不重要,因為'q'和'j'都是很少出現(xiàn)的字母),通常左上和右下矩陣式是標(biāo)準字母排序明文矩陣,右上和左下矩陣是打亂順序的密鑰矩陣。例如矩陣:明文:`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG`整理明文(分組不夠時用'*'填充):`THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG*`加密過程:分別在明文矩陣中找到'TH',分別找到他們在右上矩陣有左下矩陣的交點字母'ES'就是密文,以此類推。密文:`ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ`**〔2〕密鑰矩陣加解密**>>>frompycipherimportFoursquare>>>fs=Foursquare('zgptfoihmuwdrykeqa*vsbl','mfnbdcrhsa*yogvituewlqzkp')>>>fs.encipher('THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG')'ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ'>>>fs.decipher('ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ')'THEQUICKBROWNFO*JUMPSOVERTHELAZYDOG'在線加解密[傳送門](.practicalcryptography./ciphers/classical-era/four-square/)**〔3〕未知密鑰矩陣破解**推薦一篇關(guān)于采用[模擬退火算法](/*ianlingmao/article/details/7798647)的[四方密碼分析](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-foursquare-cipher/)文章,如果有足夠多的密文則四方密碼可以輕易被破解,如果知道了明文和密文推出密鑰是很容易的,猜想局部明文是一個有效的方法去破解四方密碼,如果一局部明文或者可以被猜想出則我們首先要確定盡可能多可利用的密鑰,然后才可以進展更多的推測或者用其他的方法破譯?;谒姆矫艽a分析一文實現(xiàn)的[C代碼](.practicalcryptography./cryptanalysis/stochastic-searching/cryptanalysis-foursquare-cipher/)破解例如:密文(密文最好在200個字符以上):HMMKEQESDTMDHLAWFWMNKSOSFOMRFNLWLKHNSQGGEK*EOLLVD*NRSQQGARTFKSAVNUDLFNDHESPZGQTWESAGPGSQSQSTPKUSBBQLQHESAGPGSQSQG*LNAVHTPMHMKKNYGSUGDMTPDGFNKYAVH*LWGEKRILESLZZOFNAVIHRHRKAGHSMYUGEGNSRGAVMVOQPRLNKR*LMYLQP*ILESQYBNRHRKAGKYQ*DIHMPGPYOERZOLBEZLURFWLWUOLDDPNSQYAGMUQPQWESBEZVEQESDTMDBQLWDIUSHB用法:gcc-O3-lmfoursquarecrack2.cscoreTe*t_2.c-ofsc./fsc輸出結(jié)果:Runningfoursquarecrack,thiscouldtakeafewminutes...bestscoresofar:-1239.505249,oniteration1Key:'KFMLUGWSQEPOZTNRBHDAV*CIY','UGSVKFIZMOY*PQRWTHLNCABED'plainte*t:'THECIPHERTE*TSQUARESCANBEGENERATEDUSINGAKEYWORDDROPPINGDUPLICATELETTERSTHENFILLTHEREMAININGSPACESWITHTHEREMAININGLETTERSOFTHEALPHABETINORDERALTERNATIVELYTHECIPHERTE*TSQUARESCANBEGENERATEDCOMPLETELYRANDOMLYTHEFOURSQUAREALGORITHMALLOWSFORTWOSEPARATEKEYSONEFOREACHOFTHETWOCIPHERTE*TMATRICES*'22.棋盤密碼棋盤密碼〔CheckerboardCipher)是使用一個波利比奧斯方陣和兩個密鑰作為密陣的替換密碼,通常在波利比奧斯方陣中J字母往往被包含在I字母中。例如密陣:QUICKB|KNI/JGHR|PQRSTO|OYZUAW|M*WVBN|LFEDC經(jīng)過密陣替換:明文:THEQUICKBROWNFO*密文:RKBKRUOCOCBINKBQWKRIOQWIBUNUOQWU23.跨棋盤密碼跨棋盤密碼(StraddleCheckerboardCipher)是一種替換密碼,當(dāng)這種密碼在結(jié)合其他加密方式,加密效果會更好。棋盤例如(選擇3和7作為變換):0123456789fkmcpdye3:hbigqrosaz7:lutjnwv*明文:`THEQUICKBROWNFO*`經(jīng)過加密棋盤替換得到密文:`7230934713241313536757403677`當(dāng)然我們還可以繼續(xù)用其他的加密方式在對跨棋盤密碼加密出的結(jié)果再進展加密:例如變換密鑰:83729+在經(jīng)過棋盤轉(zhuǎn)換后:ppfmyknifpfkyfydhkmmcfc最終得到密文:ppfmyknifpfkyfydhkmmcfc在線加解密[傳送門](.practicalcryptography./ciphers/classical-era/straddle-checkerboard/)24.分組摩爾斯替換密碼分組摩爾斯替換密碼(FractionatedMorseCipher)首先把明文轉(zhuǎn)換為莫爾斯電碼,不過每個字母之間用`*`分開,每個單詞用`**`分開。然后使用密鑰生成一個替換密表,這個密表包含所有`.-*`組合的情況(因為不會出現(xiàn)`***`的情況,所以一共26種組合)。密鑰:`MORSECODE`密表:MORSE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保檢測信息共享協(xié)議
- 房屋買賣定金合同意向金
- 會計稅務(wù)申報服務(wù)合同
- 招標(biāo)文件備案全教程
- 車輛服務(wù)合同的簽訂程序
- 職業(yè)裝制作合同樣式
- 政府采購合同的培訓(xùn)課程
- 居家護工護理合同
- 企業(yè)年度采購合同案例
- 磚瓦殘骸購銷協(xié)議
- 2024河北工業(yè)職業(yè)技術(shù)大學(xué)教師招聘考試筆試試題
- 國際物流運輸管理智慧樹知到期末考試答案章節(jié)答案2024年上海海事大學(xué)
- 銀行轉(zhuǎn)賬截圖生成器制作你想要的轉(zhuǎn)賬截圖
- 食管早癌的內(nèi)鏡診斷
- 幼兒園進餐案例及分析總結(jié)
- 2024年中考英語第一次模擬考試(南京卷)
- 2023-2024學(xué)年江西省南昌二十八中教育集團八年級(上)期末英語試卷
- 輔助生殖科輔助生殖技術(shù)診療規(guī)范與技術(shù)操作規(guī)范
- 吉蘭巴雷綜合癥的護理
- 中國畫創(chuàng)作智慧樹知到期末考試答案章節(jié)答案2024年湖北科技學(xué)院
- 中醫(yī)病歷書寫基本規(guī)范
評論
0/150
提交評論