




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
CTF密碼學(Cryptography)知識點總結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.UTF-8編碼12.Hash算法&加鹽Hash算法13.MD5算法14.敲擊碼(Tapcode)15.莫爾斯電碼(MorseCode)換位加密: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.ADFGX和ADFGVX密碼(ADFG/VXCipher)19.雙密碼(BifidCipher)20.三分密碼(TrifidCipher)21.四方密碼(Four-SquareCipher)22.棋盤密碼(CheckerboardCipher)23.跨棋盤密碼(StraddleCheckerboardCipher)24.分組摩爾斯替換密碼(FractionatedMorseCipher)25.Bazeries密碼(BazeriesCipher)26.Digrafid密碼(DigrafidCipher)27.格朗普雷密碼(GrandpréCipher)28.盲文密碼(Blindciphers)29.鍵盤密碼(KeyboardCipher)代碼混淆加密:1.asp混淆加密2.php混淆加密3.css/js混淆加密4.VBScript.Encode混淆加密5.ppencode6.rrencode7.jjencode/aaencode8.JSfuck9.jother10.brainfuck11.uuencode0x02正文常見編碼:1.ASCII編碼:ASCII編碼大致可以分作三部分組成:第一部分是:ASCII非打印控制字符(參詳ASCII碼表中0-31);第二部分是:ASCII打印字符,也就是CTF中常用到的轉換;第三部分是:擴展ASCII打印字符2.Base64/32/16編碼:base64、base32、base16可以分別編碼轉化8位字節為6位、5位、4位。16,32,64分別表示用多少個字符來編碼,Base64編碼要求把3個8位字節轉化為4個6位的字節,之后在6位的前面補兩個0,形成8位一個字節的形式,6位2進制能表示的最大數是2的6次方是64,這也是為什么是64個字符(A-Z,a-z,0-9,+,/這64個編碼字符,=號不屬于編碼字符,而是填充字符)。源文本:Thequickbrownfoxjumpsoverthelazydog編碼后:Base64VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw==3.shellcode編碼:源文本:Thequickbrownfoxjumpsoverthelazydog編碼后:\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\x674.Quoted-printable編碼:它是多用途互聯網郵件擴展(MIME)一種實現方式。有時候我們可以郵件頭里面能夠看到這樣的編碼。源文本:敏捷的棕色狐貍跳過了懶惰的狗編碼后:=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編碼解碼[鏈接](/tools/QuotedPrintable.aspx)5.XXencode編碼:XXencode將輸入文本以每三個字節為單位進行編碼。如果最后剩下的資料少于三個字節,不夠的部份用零補齊。這三個字節共有24個Bit,以6bit為單位分為4個組,每個組以十進制來表示所出現的數值只會落在0到63之間。以所對應值的位置字符代替。它所選擇的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64個字符。跟base64打印字符相比,就是UUencode多一個“-”字符,少一個”/”字符。源文本:Thequickbrownfoxjumpsoverthelazydog編碼后:hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNkc+編碼解碼[鏈接](/charsetxxencode)6.UUencode編碼:UUencode是一種二進制到文字的編碼,最早在unix郵件系統中使用,全稱:Unix-to-Unixencoding,UUencode將輸入文本以每三個字節為單位進行編碼,如果最后剩下的資料少于三個字節,不夠的部份用零補齊。三個字節共有24個Bit,以6-bit為單位分為4個組,每個組以十進制來表示所出現的字節的數值。這個數值只會落在0到63之間。然后將每個數加上32,所產生的結果剛好落在ASCII字符集中可打印字符(32-空白…95-底線)的范圍之中。源文本:Thequickbrownfoxjumpsoverthelazydog編碼后:M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9PH*編碼解碼[鏈接](/charsetuuencode)7.URL編碼:url編碼又叫百分號編碼,是統一資源定位(URL)編碼方式。URL地址(常說網址)規定了常用地數字,字母可以直接使用,另外一批作為特殊用戶字符也可以直接用(/,:@等),剩下的其它所有字符必須通過%xx編碼處理?,F在已經成為一種規范了,基本所有程序語言都有這種編碼,如js:有encodeURI、encodeURIComponent,PHP有urlencode、urldecode等。編碼方法很簡單,在該字節ascii碼的的16進制字符前面加%.如空格字符,ascii碼是32,對應16進制是'20',那么urlencode編碼結果是:%20。源文本:Thequickbrownfoxjumpsoverthelazydog編碼后:%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編碼解碼[鏈接](/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編碼解碼[鏈接](/tools/Unicode.aspx)9.Escape/Unescape編碼:Escape/Unescape加密解碼/編碼解碼,又叫%u編碼,采用UTF-16BE模式,Escape編碼/加密,就是字符對應UTF-1616進制表示方式前面加%u。Unescape解碼/解密,就是去掉"%u"后,將16進制字符還原后,由utf-16轉碼到自己目標字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。源文本:The編碼后:%u0054%u0068%u006510.HTML實體編碼:完整編碼手冊[參考](/tags/html_ref_entities.html)11.utf-8編碼:這是為了利用內存采用的一種編碼格式,這里只是看看其特征開頭ascii表之外的字符,對于能用ascii表示的字符仍用ascii表示還是一個長度,就節省了內存。12.hash算法&加鹽hash算法:hash:是一系列單向函數,就是這種運算是不可逆的,只可以通過hash運算得到一個hash值,而不能通過hash值得到原始數據。并且經過hash運算后得到的hash值為固定長度。加鹽hash:網站后臺一般只儲存用戶密碼的hash值,但也存在一定風險,因為如果黑客拿到了密碼的hash后,可以的通過對比已經存在的明文與哈希的對應數據,進行對比,獲得明文密碼。因此,有了加鹽hash,就是隨機的在用戶密碼后加上一段字符后再進行hash運算,由于黑客不知道加的鹽是什么,依然無法得到密碼。13.MD5算法:D5是hash算法中一種特殊的算法而已,也是hash算法,最后的結果為128個字符,但一般取其中的64或者32位。MD5在線解密://14.敲擊碼:敲擊碼(Tapcode)是一種以非常簡單的方式對文本信息進行編碼的方法。因該編碼對信息通過使用一系列的點擊聲音來編碼而命名,敲擊碼是基于5×5方格波利比奧斯方陣來實現的,不同點是是用K字母被整合到C中。敲擊碼表:123451ABC/KDE2FGHIJ3LMNOP4QRSTU5VWXYZ例:F:2,1O:3,415.莫爾斯電碼:摩爾斯電碼(MorseCode)是由美國人薩繆爾·摩爾斯在1836年發明的一種時通時斷的且通過不同的排列順序來表達不同英文字母、數字和標點符號的信號代碼,摩爾斯電碼主要由以下5種它的代碼組成:源文本:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG編碼后:-...../--.-..-..-.-.-.-/-....-.---.---./..-.----..-/.---..---.--..../---...-..-./-...../.-...---..-.--/-..-----.編碼解碼[鏈接](/tools/cipher/morse.php)換位加密:1.柵欄密碼:柵欄密碼(Rail-fenceCipher)就是把要加密的明文分成N個一組,然后把每組的第1個字符組合,每組第2個字符組合...每組的第N(最后一個分組可能不足N個)個字符組合,最后把他們全部連接起來就是密文,這里以2欄柵欄加密為例。明文:Thequickbrownfoxjumpsoverthelazydog去空格:Thequickbrownfoxjumpsoverthelazydog分組:Thequickbrownfoxjumpsoverthelazydog第一組:Teucbonojmsvrhlzdg第二組:hqikrwfxupoeteayo密文:Teucbonojmsvrhlzdghqikrwfxupoeteayo編碼解碼[鏈接](/ciphers/classical-era/rail-fence/)2.曲路密碼:曲路密碼(CurveCipher)是一種換位密碼,需要事先雙方約定密鑰(也就是曲路路徑)。明文:Thequickbrownfoxjumpsoverthelazydog填入5行7列表(事先約定填充的行列數)加密的回路線(事先約定填充的行列數)密文:gesfcinphodtmwuqouryzejrehbxvalookT3.列移位密碼:列移位密碼(ColumnarTranspositionCipher)是一種比較簡單,易于實現的換位密碼,通過一個簡單的規則將明文打亂混合成密文。明文:Thequickbrownfoxjumpsoverthelazydog密鑰:howareu填入5行7列表(事先約定填充的行列數,如果明文不能填充完表格可以約定使用某個字母進行填充)按howareu在字母表中的出現的先后順序進行編號,我們就有a為1,e為2,h為3,o為4,r為5,u為6,w為7,所以先寫出a列,其次e列,以此類推寫出的結果便是密文:howareu3471526密文:qouryinphoTkoolhbxvauwmtdcfsegerjez行列數相等的填充規則列移位密碼加解密[鏈接](/ciphers/classical-era/columnar-transposition/)另外由列移位密碼變化來的密碼也有其他的,比如[Amsco密碼](/kryptos/amsco-cipher)(AmscoCipher)和[Cadenus密碼](/kryptos/cadenus-cipher)(CadenusCipher)。替換加密:1.埃特巴什碼(AtbashCipher):埃特巴什碼(AtbashCipher)是一種以字母倒序排列作為特殊密鑰的替換加密,也就是下面的對應關系:ABCDEFGHIJKLMNOPQRSTUVWXYZZYXWVUTSRQPONMLKJIHGFEDCBA明文:thequickbrownfoxjumpsoverthelazydog密文:gsvjfrxpyildmulcqfnkhlevigsvozabwlt加解密[傳送門](/ciphers/classical-era/atbash-cipher/)2.凱撒密碼:凱撒密碼(CaesarCipher或稱愷撒加密、愷撒變換、變換加密、位移加密)是一種替換加密,明文中的所有字母都在字母表上向后(或向前)按照一個固定數目進行偏移后被替換成密文。例,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推。加密實例:明文:Thequickbrownfoxjumpsoverthelazydog偏移量:1密文:Uifrvjdlcspxogpykvnqtpwfsuifmbazeph3.ROT5/13/18/47:ROT5/13/18/47是一種簡單的碼元位置順序替換暗碼。此類編碼具有可逆性,可以自我解密,主要用于應對快速瀏覽,或者是機器的讀取。ROT5:rotateby5places簡寫,意思是旋轉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以例。明文:thequickbrownfoxjumpsoverthelazydog密文:gurdhvpxoebjasbkwhzcfbiregurynmlqbt4.簡單替換密碼:簡單換位密碼(SimpleSubstitutionCipher)加密方式是以每個明文字母被與之唯一對應且不同的字母替換的方式實現的,它不同于愷撒密碼,因為密碼字母表的字母不是簡單的移位,而是完全是混亂的。比如對應關系為:abcdefghijklmnopqrstuvwxyzphqgiumeaylnofdxjkrcvstzwb那么加密后為:明文:thequickbrownfoxjumpsoverthelazydog密文:ceijvaqlhkdtfudzyvoxrdsikceinpbwgdm解密:當密文數據足夠多時這種密碼我們可以通過字頻分析方法破解或其他方法破解,比較好的在線詞頻分析網站[/index.php](/index.php)(翻墻),這里推薦一篇通過"爬山算法"來破解簡單替換密碼(/cryptanalysis/stochastic-searching/cryptanalysis-simple-substitution-cipher/),基于文中的算法實現的工具來破解示例。密文:pmpafxaikkitprdsikcplifhwceigixkirradfeirdgkipgigudkcekiigpwrpucikceiginasikwduearrxiiqepcceindgmieinpwdfprduppcedoikiqiasafmfddfipfgmdafmfdteiki解密:密鑰:PHQGIUMEAVLNOFDXBKRCZSTJWY明文:AGAINPIERREWASOVERTAKENBYTHEDEPRESSIONHESODREADEDFORTHREEDAYSAFTERTHEDELIVERYOFHISSPEECHATTHELODGEHELAYONASOFAATHOMERECEIVINGNOONEANDGOINGNOWHERE將明文轉換成可讀句子:againpierrewasovertakenbythedepressionhesodreadedforthreedaysafterthedeliveryofhisspeechatthelodgehelayonasofaathomereceivingnooneandgoingnowhere5.希爾密碼:希爾密碼(HillCipher)是基于線性代數多重代換密碼,由LesterS.Hill在1929年發明。每個字母轉換成26進制數字:A=0,B=1,C=2...Z=25一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果MOD26。更多[參考](/wiki/Hill_cipher)**略**6.豬圈密碼:豬圈密碼(PigpenCipher或稱九宮格密碼、朱高密碼、共濟會密碼或共濟會員密碼),是一種以格子為基礎的簡單替代式密碼。明文字母和對應密文:7.波利比奧斯方陣密碼:波利比奧斯方陣密碼(PolybiusSquareCipher或稱波利比奧斯棋盤)是棋盤密碼的一種,是利用波利比奧斯方陣進行加密的密碼方式,簡單的來說就是把字母排列好,用坐標(行列)的形式表現出來。字母是密文,明文便是字母的坐標。常見的排布方式:1 2 3 4 51 A B C D E2 F G HI/J K3 L M N O P4 Q R S T U5 V W X Y Z加密實例:明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG密文:442315414524132512423452332134532445323543442315311155541434228.夏多密碼(曲折加密):夏多密碼是作者麥克斯韋·格蘭特在中篇小說《死亡之鏈》塑造夏多這一英雄人物中所自創的密碼,如下圖所示:注意,在以上所示的字母表密鑰的底部,列有四個附加符號1,2,3,4.他們可以放在密文中的任何地方。每個附加符號指示,如何轉動寫有密文的紙張,再進行后續的加密或解密操作,直到出現另一個附加符號??梢园衙總€附加符號中的那根線看作是指示針,它指示了紙張的上端朝上,朝右,朝下,朝左。比如說:如果出現符號3,那么紙張就應該轉動180度,使其上端朝下;符號2表示紙張上端朝右,依次類推。明文:IAMINDANGERSENDHELP密文:9.普萊菲爾密碼:普萊菲爾密碼(PlayfairCipher)是第一種用于實際的雙字替換密碼,用雙字加密取代了簡單代換密碼的單字加密,很明顯這樣使得密文更難破譯,因為使用簡單替換密碼的頻率分析基本沒有什么作用,雖然頻率分析,通常仍然可以進行,但是有25×25=625種可能而不是25種可能,可以分為三個步驟,即編制密碼表、整理明文、編寫譯文。明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG密鑰:CULTUR普萊菲爾密碼又稱為單方密碼(SingleCipher)之后又出現它的升級版DoublePlayfair,也就是[二方密碼](Two-squareCipher),在之后又有四方密碼(Four-squareCipher)。(1)編制密碼表1.整理密鑰字母CULTURE,去掉后面重復的字母得到:CULTRE2.用上一步得到的字母自上而下來填補5乘5方表的縱列(也可橫排),之后的空白按照相同的順序用字母表中剩余的字母依次填補完整:這一步需要注意的要點:整理密鑰字母時,如果出現"Z",則需要去除,因為在英文里"Z"的使用頻率最低,相應的如果是德文,則需將"I"與"J"當作一個字母來看待,而法語則去掉"W"或"K"。(2)整理明文我們要遵循的原則是“兩個一組”,得到是若干個兩兩成對的字母段,用到的是明文THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG與字母"X":1.將明文兩兩一組按順序排開,得到:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG2.對于末尾的單個字母要加上一個"X"使之成對:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOGX這一步需要注意的要點:對于相連字母相同者,每個后面都需要加"X",例如TOMORROW,需要寫成:TOMORXRXOW。(3)編寫密文我們要得到的密文,當然,對于每個字母對,要嚴格遵循如下的原則:1.如果兩個字母在同一行則要用它右鄰的字母替換,如果已在最右邊,則用該行最左邊的替換,如明文為"CE",依據上表,應替換為"EG";2.如果兩個字母在同一列則要用它下邊的字母替換,如果已在最下邊,則用該行最上邊的替換,如明文為"OQ",依據上表,應替換為"PS";3.如果兩個字母在不同的行或列,則應在密碼表中找兩個字母使四個字母組成一個矩形,明文占據兩個頂點,需用另外兩個頂點的字母替換,如明文為"HX",可以替換為"WI/J"或"I/JW"(下面的例子將按照橫向替換原則即同行優先)。按照上述原則,將明文THEQUICKBROWNFOXJUMPSOVERTHELAZYDOGX加以轉換得到KUNDLHGTLFWUESPWLHSI/JNPCGCRAGBUVZQAI/JV(/表示或者,不過一般用I不用J,所以分析密文時你看25個字母都有而只差一個字母沒有用到可以考慮一下這種加密方式)將得到的字母改為大寫并五個一組列好,得到密文KUNDLHGTLFWUESPWLHSINPCGCRAGBUVZQAIV。加密解密[傳送門](/ciphers/classical-era/playfair/)(這里加解密是橫向編制密碼表)10.維吉尼亞密碼:維吉尼亞密碼(VigenèreCipher)是在單一愷撒密碼的基礎上擴展出多表代換密碼,根據密鑰(當密鑰長度小于明文長度時可以循環使用)來決定用哪一行的密表來進行替換,以此來對抗字頻統計,更多[參考](/wiki/Vigen%C3%A8re_cipher)。密表:明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG密鑰(循環使用,密鑰越長相對破解難度越大):CULTURE加密過程:如果第一行為明文字母,第一列為密鑰字母,那么明文字母T列和密鑰字母C行的交點就是密文字母V,以此類推。密文:VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK(2)已知密鑰加解密:>>>frompycipherimportVigenere>>>Vigenere('CULTURE').encipher('THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG')'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'>>>Vigenere('CULTURE').decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'在線加密解密[傳送門](/2468/)(3)未知密鑰破解:可以參考[維吉尼亞密碼分析](/cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher/)這篇文章,破解維吉尼亞密碼第一步是確定密鑰長度,維吉尼亞密碼分析這篇文章里介紹了使用[重合指數](/wiki/Index_of_coincidence)算法來確定密鑰長度,在確定密鑰長度后就可以嘗試確定密鑰,通常我們可以使用[卡方檢驗](/wiki/Chi-squared_test)來找到每個字母的偏移量,基于維吉尼亞密碼分析一文中的算法實現的工具破解示例密文:kiqpbkxspshwehospzqhoinlgapp解密:(ps:結合左邊的值,密鑰以及解出明文可以確定kien5或者klen10為準確的結果)明文:DEFENDTHEEASTWALLOFTHECASTLE(4)變種有幾種密碼和維吉尼亞密碼相似,格羅斯費爾德密碼(Gronsfeldcipher)實際上和維吉尼亞密碼相同,除了使用了數字來代替字母以外沒有什么區別。數字可以選擇一種數列,如斐波那契數列,或者一些其他的偽隨機序列。格羅斯費爾德密碼密碼分析過程和維吉尼亞密碼大同小異,不過,自動密鑰密碼不能使用[卡西斯基算法](/question/a0a1108423f63d10dbbf0c3e1bfdf3b3.html)(kasiski)來破譯,因為自動密鑰密碼的密鑰不重復循環使用,破譯自動密鑰密碼最好的方法的就是從密文不斷嘗試和猜測其中明文或密鑰的一部分。>>>frompycipherimportGronsfeld>>>Gronsfeld([2,20,11,45,20,43,4]).encipher('THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG')VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK'>>>Gronsfeld([2,20,11,45,20,43,4]).decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK')THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'在線加解密[傳送門](/tools/cipher/gronsfeld.php)11.自動密鑰密碼:(1)介紹自動密鑰密碼(AutokeyCipher)是多表替換密碼,與維吉尼亞密碼密切相關,但使用不同的方法生成密鑰,通常來說要比維吉尼亞密碼更安全。自動密鑰密碼主要有兩種,關鍵詞自動密鑰密碼和原文自動密鑰密碼.下面我們以關鍵詞自動密鑰為例:明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG關鍵詞:CULTURE自動生成密鑰:CULTURETHEQUICKBROWNFOXJUMPSOVERTHE接下來的加密過程和維吉尼亞密碼類似,從密表可得:密文:VBPJOZGDIVEQVHYYAIICXCSNLFWWZVDPWVK(2)已知關鍵詞加解密>>>frompycipherimportAutokey>>>Autokey('CULTURE').encipher('THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG')'VBPJOZGDIVEQVHYYAIICXCSNLFWWZVDPWVK'>>>Autokey('CULTURE').decipher('VBPJOZGDIVEQVHYYAIICXCSNLFWWZVDPWVK')'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'在線加解密[傳送門](/ciphers/classical-era/autokey/)(3)未知關鍵詞破解推薦去看這篇[自動密鑰密碼分析文章](/cryptanalysis/stochastic-searching/cryptanalysis-autokey-cipher/),基于文中的算法實現的工具來破解示例。密文:isjiqymdebvuzrvwhmvysibugzhyinmiyeiklcvioimbninyksmmnjmgalvimlhspjxmgfiraqlhjcpvolqmnyynhpdetoxemgnoxl解密:(ps:從klen13可以看出使用的關鍵詞為'FORTIFICATION')明文:DESPITEBEINGMORESECURETHANTHEVIGENERECIPHERTHEAUTOKEYCIPHERISSTILLVERYEASYTOBREAKUSINGAUTOMATEDMETHODS將明文轉換成可讀句子:despitebeingmoresecurethanthevigenereciphertheautokeycipherisstillveryeasytobreakusingautomatedmethods12.博福特密碼:(1)介紹博福特密碼(BeaufortCipher),是一種類似于維吉尼亞密碼的代換密碼,由弗朗西斯·蒲福(FrancisBeaufort)發明。它最知名的應用是HagelinM-209密碼機。博福特密碼屬于對等加密,即加密演算法與解密演算法相同。明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG密鑰(循環使用,密鑰越長相對破解難度越大):CULTURE加密過程:如果第一行為明文字母,第一列為密文字母,那么沿明文字母T列出現密鑰字母C的行號就是密文字母J,以此類推。密文:JNHDAJCSTUFYEZOXCZICMOZHCBKARUMVRDY(2)已知密鑰加解密>>>frompycipherimportBeaufort>>>Beaufort('CULTURE').encipher('THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG')'JNHDAJCSTUFYEZOXCZICMOZHCBKARUMVRDY'>>>Beaufort('CULTURE').decipher('JNHDAJCSTUFYEZOXCZICMOZHCBKARUMVRDY')'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'在線加解密[傳送門](/ciphers/classical-era/beaufort/)13.滾動密鑰密碼:滾動密鑰密碼(RunningKeyCipher)和維吉尼亞密碼有著相同的加密機制,區別是密鑰的選取,維吉尼亞使用的密鑰簡短,而且重復循環使用,與之相反,滾動密鑰密碼使用很長的密鑰,比如引用一本書作為密鑰。這樣做的目的是不重復循環使用密鑰,使密文更難破譯,盡管如此,滾動密鑰密碼還是可以被攻破,因為有關于密鑰和明文的統計分析模式可供利用,如果滾動密鑰密碼使用統計上的隨機密鑰來源,那么理論上是不可破譯的,因為任何可能都可以成為密鑰,并且所有的可能性都是相等的。明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG密鑰:選取C語言編程(1978版)第63頁第1行"errorscanoccurinseveralplaces.Alabelhas...",去掉非字母部分作為密鑰(實際選取的密鑰很長,長度至少不小于明文長度)。加密過程:加密過程和維吉尼亞密碼加密過程相同密文:XYVELAEKOFQYHWWKBYHTJOGTCTJIDAKYESR已知密鑰在線加解密[傳送門](/ciphers/classical-era/running-key/)14.Porta密碼:Porta密碼(PortaCipher)是一個由意大利那不勒斯的醫生GiovanniBattistadellaPorta發明的多表代換密碼,Porta密碼具有加密解密過程的是相同的特點。密表:KEY|ABCDEFGHIJKLMNOPQRSTUVWXYZ----|-----------------------------------------------------A,B|NOPQRSTUVWXYZABCDEFGHIJKLMC,D|OPQRSTUVWXYZNMABCDEFGHIJKLE,F|PQRSTUVWXYZNOLMABCDEFGHIJKG,H|QRSTUVWXYZNOPKLMABCDEFGHIJI,J|RSTUVWXYZNOPQJKLMABCDEFGHIK,L|STUVWXYZNOPQRIJKLMABCDEFGHM,N|TUVWXYZNOPQRSHIJKLMABCDEFGO,P|UVWXYZNOPQRSTGHIJKLMABCDEFQ,R|VWXYZNOPQRSTUFGHIJKLMABCDES,T|WXYZNOPQRSTUVEFGHIJKLMABCDU,V|XYZNOPQRSTUVWDEFGHIJKLMABCW,X|YZNOPQRSTUVWXCDEFGHIJKLMABY,Z|ZNOPQRSTUVWXYBCDEFGHIJKLMA明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG密鑰(循環使用,密鑰越長相對破解難度越大):CULTURE加密過程:明文字母T列與密鑰字母'行交點就是密文字母F,以此類推。密文:FRWHKQRYYMFMFUAAOLWHDALWIJPTZXHCNGV已知密鑰在線加解密[傳送門](/ciphers/classical-era/porta/)破解:Porta密碼可以被以[維吉尼亞密碼](/cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher-part-2/)破解相類似方式進行自動攻破,破解Porta密碼第一步是先確定密鑰長度,這里推薦一篇關于使用[重合指數算法](/wiki/Index_of_coincidence)確定為維吉尼亞密鑰長度[文章](/cryptanalysis/stochastic-searching/cryptanalysis-vigenere-cipher/)。15.同音替換密碼:同音替換密碼(HomophonicSubstitutionCipher)是單字母可以被其他幾種密文字母同時替換的密碼,通常要比標準替換密碼破解更加困難,破解標準替換密碼最簡單的方法就是分析字母出現頻率,通常在英語中字母'E'(或'T')出現的頻率是最高的,如果我們允許字母'E'可以同時被3種不同字符代替,那么就不能還是以普通字母的頻率來分析破解,如果允許可代替字符越多,那么密文就會更難破譯。常見代換規則表:明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG密文(其中一種):6CZKOVSTXJ0MAEQYIOGL40W1JUC7P9NBF0H破解:如果同音替換密碼的同音詞個數很多,那么破解它難度很大,通常的方法采取類似破解替換密碼的"爬山算法",除了找到一個明文字母映射幾個字符之外,我們還需要確定映射了那些字符,可以嘗試[2層嵌套"爬山算法"](/faculty/stamp/RUA/homophonic.pdf)來破解,外層確定映射的數量,內層確定映射字符。16.仿射密碼:**略**17.培根密碼:培根密碼(BaconianCipher)是一種替換密碼,每個明文字母被一個由5字符組成的序列替換,最初的加密方式就是由'A'和'B'組成序列替換明文(所以你當然也可以用別的字母),比如字母'D'替換成"aaabb",以下是全部的對應關系(另一種對于關系是每個字母都有唯一對應序列,I和J與U/V各自都有不同對應序列):A=aaaaaI/J=abaaaR=baaaaB=aaaabK=abaabS=baaabC=aaabaL=ababaT=baabaD=aaabbM=ababbU/V=baabbE=aabaaN=abbaaW=babaaF=aababO=abbabX=bababG=aabbaP=abbbaY=babbaH=aabbbQ=abbbbZ=babbb明文:THEFOX密文:baabaaabbbaabaaaabababbabbabab加解密[傳送門](/tools/cipher/baconian.php)18.ADFGX和ADFGVX密碼:(1)ADFGX密碼ADFGX密碼(ADFGXCipher)結合了改良過的Polybius方格替代密碼與單行換位密碼的矩陣加密密碼,使用了5個合理的密文字母:A,D,F,G,X,這些字母之所以這樣選擇是因為當轉譯成摩斯電碼(ADFGX密碼是德國軍隊在一戰發明使用的密碼)不易混淆,目的是盡可能減少轉譯過程的操作錯誤。加密矩陣示例:ADFGX----------------A|phqgmD|eaynoF|fdxkrG|cvszwX|buti/jl明文:THEQUICKBROWNFOX結果矩陣加密:XFADDAAFXDXGGAFGXAFXDXGXDGFADXFF列移位密鑰:howareu密文:DXADFAGXFXFFXDFXGGXDGFGAADAADXXF已知密鑰加解密:>>>frompycipherimportADFGX>>>a=ADFGX('phqgmeaynofdxkrcvszwbutil','HOWAREU')>>>a.encipher('THEQUICKBROWNFOX')'DXADFAGXFXFFXDFXGGXDGFGAADAADXXF'>>>a.decipher('DXADFAGXFXFFXDFXGGXDGFGAADAADXXF')'THEQUICKBROWNFOX'在線加解密[傳送門](/ciphers/adfgx-cipher/)(2)ADFGVX密碼ADFGVX密碼實際上就是ADFGX密碼的擴充升級版,一樣具有ADFGX密碼相同的特點,加密過程也類似,不同的是密文字母增加了V,使得可以再使用10數字來替換明文。加密矩陣示例:ADFGVX------------------A|ph0qg6D|4mea1yF|l2nofdG|xkr3cvV|s5zw7bX|j9uti819.雙密碼:雙密碼(BifidCipher)結合了波利比奧斯方陣換位密碼,并采用分級實現擴散,這里的“雙”是指用2個密鑰進行加密。雙密碼是由法國FelixDelastelle發明,除此之外FelixDelastelle還發明了三分密碼(TrifidCipher),四方密碼(Four-SquareCipher)。還有一個[兩方密碼](/wiki/Two-square_cipher)(Two-Square)與四方密碼類似,[共軛矩陣雙密碼](/kryptos/cm-bifid-cipher)(ConjugatedMatrixBifidCipher)也是雙密碼的變種。示例密陣:12345----------------1|phqgm2|eayln3|ofdxk4|rcvsz5|wbuti/j明文:THEQUICKBROWNFOX經過密陣轉換:行:5121554354352333列:4213352521115214分組:51215543543523334213352521115214合并:51215421335435452521352331152134在經過密陣轉換后密文:WETEDTKZNEKYOMEX(2)已知密陣加解密>>>frompycipherimport>>>Bifid('phqgmeaylnofdxkrcvszwbuti',5).encipher('THEQUICKBROWNFOX')'WETEDTKZNEKYOMEX'>>>Bifid('phqgmeaylnofdxkrcvszwbuti',5).decipher('WETEDTKZNEKYOMEX')'THEQUICKBROWNFOX'在線加解密[傳送門](/ciphers/classical-era/bifid/)(3)未知密陣破解手工分析破解雙密碼是有一定難度的,每個字母都是同過3個數字進行非線性代替轉換,而且之后還會對字母順序進行打亂,這樣使雙密碼比一些替換密碼和換位密碼更難破解。然而,現在是計算機時代,這張加密方式沒有安全性可言,通過[模擬退火](/link?url=mkceUr0W4L7B7UVQxc-dUkXKPJbj9v4YyBh_hrskt5iXk99UdnjW6mZ_YxoJO1PkT1zdjEZD2hd7TCMiSxpOma)算法就能快速找到雙密碼的密陣。這里推薦一篇詳細的[雙密碼破解分析](/cryptanalysis/stochastic-searching/cryptanalysis-bifid-cipher/)的文章,基于模擬退火算法實現的工具破解示例:密文:KWTAZQLAWWZCPONIVBTTBVQUZUGRNHAYIYGIAAYURCUQLDFTYVHTNQEENUPAIFCUNQTNGITEFUSHFDWHRIFSVTBISYDHHASQSROMUEVPQHHCCRBYTQBHWYRRHTEPEKHOBFSZUQBTSYRSQUDCSAOVUUGXOAUYWHPGAYHDNKEZPFKKWRIEHDWPEIOTBKESYETPBPOGTHQSPUMDOVUEQAUPCPFCQHRPHSOPQRSSLPEVWNIQDIOTSQESDHURIEREN解密:得到加密矩陣:GBCMKDHUETLVYWIXOZSPNFARQ明文:CRYPTANALYSISOFBIFIDBYHANDISACTUALLYFAIRLYDIFFICULTTHEFRACTIONATINGNATUREOFTHECIPHERIEEACHLETTERISSUBSTITUTEDBYCHARACTERSTHENTHESECHARACTERSAREIUMBLEDWHICHWILLPULLTHEMAPARTMAKESTHECIPHERMUCHSTRONGERTHANSUBSTITUTIONCIPHERSORTRANSPOSITIONCIPHERSONTHEIROWN20.三分密碼:三分密碼(TrifidCipher)結合換位和替換,三分密碼與雙密碼非常相似,差別之處就是用除了3×3×3的密陣代替5×5密陣。示例密陣:密陣順序=EPSDUCVWYM.ZLKXNBTFGORIJHAQ方陣1方陣2方陣31231231231EPS1M.Z1FGO2DUC2LKX2RIJ3VWY3NBT3HAQ明文:THEQUICKBROWNFOX.經過密陣轉換:THEQUICKBROWNFOX.231313122331233223313222232133112131132232213211332T(233)表示T在第一個方陣第三行第三列的位置分組(分組密鑰以5為例):THEQUICKBROWNFOX.231313122331233223313222232133112131132232213211332合并:231313313231132312232223223221312331331132113222132在經過密陣轉換后密文:231313313231132312232223223221312331331132113222132NOONWGBXXLGHHWSKW想要深入了解三分密碼并破解三分密碼的小伙伴推薦去看LANIKI教授的一篇密碼課程章節的[講義](/org/crypto/crypto/lanaki.crypt.class/lessons/lesson17.zip)21.四方密碼:四方密碼(Four-SquareCipher)是類似普萊菲爾密碼雙字母加密密碼,這樣使加密效果強于其他替換密碼,因為頻率分析變得更加困難了。四方密碼使用4個預先設置的5×5字母矩陣,每個矩陣包括25個字母,通常字母j被融入到i中(維基百科上說q被忽略,不過這不重要,因為q和j都是很少出現的字母),通常左上和右下矩陣式是標準字母排序明文矩陣,右上和左下矩陣是打亂順序的密鑰矩陣。示例矩陣:明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG整理明文(分組不夠時用X填充):THEQUICKBROWNFOXJUMPSOVERTHELAZYDOGX加密過程:分別在明文矩陣中找到TH,分別找到他們在右上矩陣有左下矩陣的交點字母ES就是密文,以此類推。密文:ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ(2)已知密鑰矩陣加解密>>>frompycipherimportFoursquare>>>fs=Foursquare('zgptfoihmuwdrcnykeqaxvsbl','mfnbdcrhsaxyogvituewlqzkp')>>>fs.encipher('THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG')'ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ'>>>fs.decipher('ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ')'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG'在線加解密[傳送門](/ciphers/classical-era/four-square/)22.棋盤密碼:棋盤密碼(CheckerboardCipher)是使用一個波利比奧斯方陣和兩個密鑰作為密陣的替換密碼,在波利比奧斯方陣中J字母往往被包含在I字母中。示例密陣:QUICK--------------------B|KNI/JGHR|PQRSTO|OYZUAW|MXWVBN|LFEDC經過密陣替換:明文:THEQUICKBROWNFOX密文:RKBKRUOCOCBINKBQWKRIOQWIBUNUOQWU23.跨棋盤密碼:跨棋盤密碼(StraddleCheckerboardCipher)是一種替換密碼,當這種密碼在結合其他加密方式,加密效果會更好。棋盤示例(選擇3和7作為變換):0123456789fkmcpdye3:hbigqrosaz7:lutjnwvx明文:THEQUICKBROWNFOX經過加密棋盤替換得到密文:7230934713241313536757403677當然我們還可以繼續用其他的加密方式在對跨棋盤密碼加密出的結果再進行加密:示例變換密鑰:837298372983729837298372983729837+7230934713241313536757403677------------------------------5502817432078501808630122404在經過棋盤轉換后:5502817432078501808630122404ppfmyknifpfkyfydhkmmcfc在線加解密[傳送門](/ciphers/classical-era/straddle-checkerboard/)24.分組摩爾斯替換密碼:分組摩爾斯替換密碼(FractionatedMorseCipher)首先把明文轉換為莫爾斯電碼,不過每個字母之間用x分開,每個單詞用xx分開。然后使用密鑰生成一個替換密表,這個密表包含所有`.-x`組合的情況(因為不會出現`xxx`的情況,所以一共26種組合)。密鑰:MORSECODE密表:MORSECDABFGHIJKLNPQTUVWXYZ.........---------XXXXXXXX...---XXX...---XXX...---XX.-X.-X.-X.-X.-X.-X.-X.-X.-說明:密表下半部分是固定的,密表的安全性以及加密效果主要取決于使用的密鑰。明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG(類似)摩爾斯電碼:-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個字符分組,再進行密表的查表。密文(經過密表替換):LMUWCOQVHGZMTAKEVYSWNOYJQNLIQBJQCDHXMDYFTWRGPFWNH已知密鑰在線加解密[傳送門](/fractmorse_tool.html)25.Bazeries密碼:Bazeries密碼(BazeriesCipher)是換位密碼和替換密碼的組合,使用兩個波利比奧斯方陣,一個明文字母方陣,使用一個隨機的數字(一般小于1000000)的生成一個密鑰矩陣同時作為第一輪明文劃分分組,比如2333這個數字翻譯為英文便是TWOTHOUSANDTHREEHUNDREDTHIRTYTHREE,從第一個字母T開始選取不重復的字母,之后再從字母表中按序選取沒有出現的字母組成密鑰矩陣。明文:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG隨機數字:2333明文矩陣:AFLQVBGMRWCHNSXDI/JOTYEKPUZ示例密鑰矩陣:TWOHUSANDREI/JYBCFGKLMPQVXZ明文分組:233323332333THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG分組明文反序:HTUQEKCIORBWNXOFMUJOSPEVEHTALEDYZGO使用密鑰矩陣替換:ILXHPQEGKDSYRCKWNXGKBVPU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CECS 10357-2024燃氣采暖熱水爐集中采購通用要求
- T/CECS 10189-2022混凝土減水劑分子量測試凝膠滲透色譜法
- T/CECS 10086-2020混凝土及砂漿用石墨尾礦砂
- T/CECS 10011-2019埋地排水用聚乙烯共混聚氯乙烯雙壁波紋管材
- T/CCOA 21-2020蘿卜籽油
- T/CCBD 18-2022品牌評價中餐菜系
- T/CAQI 27-2017中小學教室空氣質量規范
- T/CAQI 213-2021飲用水處理裝置除病毒功能技術規范
- 蘇寧java開發工程師面試題及答案
- 亞信java面試題及答案2025年
- 汽車租賃公司汽車租賃管理制度匯編
- 脊髓損傷康復講義
- 布草洗滌服務方案完整版
- 氣體安全知識培訓(72張)課件
- 國際慕課學習者使用手冊
- 共線向量與共面向量全面版課件
- JJG(晉) 22-2021 車用甲醇燃料加注機檢定規程
- 湘美版小學四年級美術下冊知識點
- 大連市住宅小區物業收費等級標準
- 包裝自動線課程設計含全套資料
- 長輸管道施工
評論
0/150
提交評論