轉眼已經畢業半年,回過頭來看這篇小筆記,居然有2k的訪問,莫名的驚喜。php
作ctf應該爲了學習,爲了作題的過程與思路,而不是爲了作題而作題。html
0.md5(只包含數字(0-9)和字母(a-f),長度爲16或32) 注意長度,字符和替換 #utf-7 密文:+/v+ +ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA+AC0- +Axxxxxxxxx- 是 UTF-7 編碼的特殊格式。因此只取+ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA+AC0- 解碼獲得<script>alert("key:/%nsfocusXSStest%/")</script>- http://toolswebtop.com/text/process/decode/UTF-7 00.Windows hash 附件以下 nick:1003:8EA9109FDA91D6BFC6EBE8776A153FEB:C6002D00F57F9F399B6263D714AF8C3A::: Tips:LMHASH,NTHASH,Ophcrack可知這是windows的hash密碼 Windows系統下的hash密碼格式爲:用戶名稱:RID:LM-HASH值:NT-HASH值,例如: nick:1003:8EA9109FDA91D6BFC6EBE8776A153FEB:C6002D00F57F9F399B6263D714AF8C3A::: 8EA9109FDA91D6BFC6EBE8776A153FEB:C6002D00F57F9F399B6263D714AF8C3A解碼後就是密碼 用戶名稱爲:nick RID爲:1003 LM-HASH值爲:8EA9109FDA91D6BFC6EBE8776A153FEB NT-HASH值爲:C6002D00F57F9F399B6263D714AF8C3A 在http://www.objectif-securite.ch/en/ophcrack.php解密的passwd爲hacker521,登錄就能獲得flag root:$6$HRMJoyGA$26FIgg6CU0bGUOfqFB0Qo9AE2LRZxG8N3H.3BK8t49wGlYbkFbxVFtGOZqVIq3qQ6k0oetDbn2aVzdhuVQ6US.:17770:0:99999:7::: 用戶名root RID 6 LM-HASH值爲26FIgg6CU0bGUOfqFB0Qo9AE2LRZxG8N3H NT-HASH 3BK8t49wGlYbkFbxVFtGOZqVIq3qQ6k0oetDbn2aVzdhuVQ6US 1.ASCII編碼 ASCII編碼大體能夠分做三部分組成: 第一部分是:ASCII非打印控制字符(參詳ASCII碼錶中0-31); 第二部分是:ASCII打印字符,也就是CTF中經常使用到的轉換; #例題/;從一個二維碼裏掃到一串數字 45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32? 看起來像是ascii,根據ascii表解碼獲得了這些: EFEF2E2FFEF2FEFF2FFF2EFFF2FFEEFE2EFFF2FFF2FEFF2 若是把2當作是斷開,那麼就獲得 EFEF E FFEF FEFF FFF EFFF FFEEFE EFFF FFF FEFF 看起來很像摩斯碼吧,E是—,F是. 因而解密就獲得CTFnullSBnullBSL 2.Base64/32/16編碼 編碼原理:Base64編碼要求把3個8位字節轉化爲4個6位的字節,以後在6位的前面補兩個0,造成8位一個字節的形式,6位2進制能表示的最大數是2的6次方是64, 這也是爲何是64個字符(A-Z,a-z,0-9,+,/這64個編碼字符,=號不屬於編碼字符,而是填充字符)的緣由 #若是decode後發現變空白了,說明有問題,這種的通常都是=的問題,嘗試增減=,發現加兩個=時有變化: Key1一看就是標準的base全家桶,but 兩種base64解出來是亂碼啊,base32老是解不出來,這裏涉及到python語法(http://zhidao.baidu.com/link?url=d4lCkOsTA0RmtoKdb_-9DI2mnmPIJWPoWMvoL-jRANYzq4cZp1wPPw1yvviZo2jeY6Ki8Ds8B4834YShiTlmr_) >>> a = 'DaoChangcloud01' >>> import base64 >>> b = base64.b32encode(a) >>> print b IRQW6Q3IMFXGOY3MN52WIMBR >>> c = base64.b32decode(b, True) >>> print c DaoChangcloud01 >>> c1='IRQW6Q3IMFXGOY3MN52WIMBr' #這裏最後一個字母改爲小寫測試 >>> base64.b32decode(c1, True) 'DaoChangcloud01' >>> base64.b32decode(c1, False) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Python26\lib\base64.py", line 222, in b32decode raise TypeError('Non-base32 digit found') TypeError: Non-base32 digit found 最終decod出來Comeon2012baby 提交後獲得key2 :2tHEWinNer #base混合解密 import base64 file = open('base.txt','r') st = file.read() while True: try: st = base64.b16decode(st) except: try: st = base64.b32decode(st) except: st = base64.b64decode(st) if(st.find('flag') == 0): print(st) 3.shellcode編碼 #!shell \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 編碼 #!shell =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 5.XXencode編碼 它所選擇的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64個字符。跟base64打印字符相比,就是XXencode多一個「-」 字符,少一個」/」 字符。 6.UUencode編碼 UUencode所產生的結果恰好落在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://www.qqxiuzi.cn/bianma/uuencode.php 7.URL編碼 在該字節ascii碼的的16進制字符前面加%. 如 空格字符,ascii碼是32,對應16進制是'20',那麼urlencode編碼結果是:%20。 #!shell %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編碼 有以下四種編碼方式 源文本: The &#x [Hex]: The &# [Decimal]: The \U [Hex]: \U0054\U0068\U0065 \U+ [Hex]: \U+0054\U+0068\U+0065 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 結果 描述 實體名稱 實體編號 " quotation mark " " ' apostrophe ' ' & ampersand & & < less-than < < > greater-than > > 11.敲擊碼 敲擊碼(Tap code)是一種以很是簡單的方式對文本信息進行編碼的方法。因該編碼對信息經過使用一系列的點擊聲音來編碼而命名,敲擊碼是基於5×5方格波利比奧斯方陣來實現的,不一樣點是是用K字母被整合到C中。 敲擊碼錶: #!shell 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 12.莫爾斯電碼 摩爾斯電碼(Morse Code)是由美國人薩繆爾·摩爾斯在1836年發明的一種時通時斷的且經過不一樣的排列順序來表達不一樣英文字母、數字和標點符號的信號代碼,摩爾斯電碼主要由如下5種它的代碼組成: 點(.) 劃(-) 每一個字符間短的停頓(一般用空格表示停頓) 每一個詞之間中等的停頓(一般用 / 劃分) 以及句子之間長的停頓 摩爾斯電碼字母和數字對應表: #!shell 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 --.. = -...- ·-·-·-·-·- 表達的意思是調用信號,表示「我有消息發送」 #敲擊碼 敲擊碼(Tap code)是一種以很是簡單的方式對文本信息進行編碼的方法。因該編碼對信息經過使用一系列的點擊聲音來編碼而命名,敲擊碼是基於5×5方格波利比奧斯方陣來實現的,不一樣點是是用K字母被整合到C中。 #各類文本加密 文本加密能夠將正常文本內容打亂爲不可連讀的文字或符號(漢字 數字 字母 音樂符號 國際音標 盲文 韓文 日文 傣文 彝文 箭頭符號 花朵符號 俄文),換行等格式信息也會被清除,達到加密的做用。在進行文本加密時能夠設定一個密碼,這樣只有知道密碼的人才能解密文本。密碼能夠是數字、字母和下劃線,最多九位。 http://www.qqxiuzi.cn/bianma/wenbenjiami.php 例如 明文:我愛你 密文:耜懍笫煨證喊== 明文:我愛你 密文:???←?↙??== 敲擊碼錶: #!shell 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 000000000000換位密碼 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 密文: Teucbonojmsvrhlzdghqikrwfxupoeteayo1 加解密 傳送門 2.曲路密碼(Curve Cipher)是一種換位密碼,須要事先雙方約定密鑰(也就是曲路路徑)。 明文: The quick brown fox jumps over the lazy dog 填入5行7列表(事先約定填充的行列數) 3.列移位密碼 頗有意思~~,見靈哥的文章 000000000000替換加密 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.凱撒密碼 凱撒密碼(Caesar Cipher或稱愷撒加密、愷撒變換、變換加密、位移加密)是一種替換加密,明文中的全部字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例,當偏移量是3的時候,全部的字母A將被替換成D,B變成E,以此類推,更多 參考 。 加解密http://planetcalc.com/1434/ 也可以使用米斯特的小工具哦~~ vbkq{ukCkS_vrduztucCVQXVuvzuckrvtZDUBTGYSkvcktv} 發現是凱撒加密,不過奇偶數移位方向不同,發現偏移量是16,用腳本跑一下 str = "vbkq{ukCkS_vrduztucCVQXVuvzuckrvtZDUBTGYSkvcktv}" for i in range(26): key = '' for x in str: s = ord(x) if (s not in range(97,123)) and (s not in range(65,91)): key = key + chr(s) else: #print chr(s) if s in range(97,123): if s % 2 == 0: s = s - i if s not in range(97,123): t = 97-s t = 123-t key = key + chr(t) else: key = key + chr(s) else: s = s + i if s not in range(97,123): t = s-122+96 key = key + chr(t) else: key = key + chr(s) else: #print chr(s) if s % 2 == 0: s = s - i if s not in range(65,91): t = 65-s t = 91-t key = key + chr(t) else: key = key + chr(s) else: s = s + i if s not in range(65,91): t = s-90+64 key = key + chr(t) else: key = key + chr(s) print key 3.ROT5/13/18/47 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.簡單替換密碼 簡單換位密碼(Simple Substitution Cipher)加密方式是以每一個明文字母被與之惟一對應且不一樣的字母替換的方式實現的, 它不一樣於愷撒密碼,由於密碼字母表的字母不是簡單的移位,而是徹底是混亂的。 好比: #!shell 明文字母 : 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 (翻= =牆), 這裏推薦一篇經過"登山算法"來破解簡單替換密碼 文章 ,基於文中的算法實現的工具來破解示例。 5.希爾密碼--考察你的線性代數咯 解碼 http://www.practicalcryptography.com/ciphers/hill-cipher/ #希爾密碼 密文: 22,09,00,12,03,01,10,03,04,08,01,17 (c) 使用的矩陣是 1 2 3 4 5 6 7 8 10 請對密文解密. 一個希爾密碼 老老實實寫個Python解密 #!/usr/bin/env python # -*- coding: utf-8 -*- __Url__ = 'Http://www.purpleroc.com' __author__ = 'Tracy_梓朋' from numpy import * Dic = {chr(i+97):i for i in range(26)} def decode(pwd, org): temp = [] result = [] while True: if len(pwd) % 3 != 0: pwd.append(pwd[-1]) else: break for i in pwd: temp.append(Dic.get(i)) temp = array(temp) temp = temp.reshape(len(pwd)/3, 3) #print temp #print org xx = matrix(temp)*org for j in range(len(pwd)/3): for i in range(3): if (int(xx[j, i]) >= 26): result.append(chr(xx[j, i] % 26 + 97)) #print xx[j, i] % 26 else: #print xx[j, i] result.append(chr(xx[j, i] + 97)) return result def get_vmatrix(org): org_adjoin = org.I*linalg.det(org) print org_adjoin org_det = int(str(abs(linalg.det(org))).split('.')[0]) print org_det for i in range(1, 26): if i * org_det % 26 == 1: break org_mod = -org_adjoin * i % 26 org_mod = matrix(org_mod) temp = [] for i in range(org_mod.shape[0]): for j in range(org_mod.shape[1]): temp.append(int(str(org_mod[i, j]).split('.')[0])) org_final = matrix(temp).reshape(org_mod.shape[0], org_mod.shape[1]) #print org_final return org_final if __name__ == '__main__': ''' for test pwd = list("act") org = matrix(array([[6, 24, 1], [13 , 16, 10], [20, 17, 15]])) result = decode(pwd, org) print "".join(result) deorg = matrix(array([[8, 5, 10], [21 , 8, 21], [21, 12, 8]])) result = decode(result, deorg) print "".join(result) ''' pwd = "wjamdbkdeibr" #密文 pwd = list(pwd) org = matrix(array([[1,2,3],[4,5,6],[7,8,10]])) #解密矩陣 org_vm = get_vmatrix(org) print org_vm print "Your flag is :" + "".join(decode(pwd, org_vm)) 6.豬圈密碼(Pigpen Cipher或稱九宮格密碼、朱高密碼、共濟會密碼或共濟會員密碼),是一種以格子爲基礎的簡單替代式密碼。可使用米斯特小工具試試,若是不行的話能夠再試試其餘變種 7.VBscript.Encode http://adophper.com/encode.html #@~^TgAAAA=='[6*liLa6++p'aXvfiLaa 6i[[avWi[[a *p[[6*!I'[6 cp'aXvXILa6 fp[:6+Wp[:XvWi[[6+XivRIAAA==^#~@ 解完密以後是這樣 Encode@decode 這個是網頁用的一種不能算編碼的東西,控制檯可解,還有就是發佈到百度也會自動轉成ascii 控制檯document.write("Encode@decode")就好了 8. #小明某一天收到一封密信,信中寫了幾個不一樣的年份:辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。信的背面還寫有「+甲子」,請解出這段密文。key值:CTF{XXX} 從題目能夠知道是 「干支數 + 甲子(60)」= 數字(ascii)-->對應的字母 辛卯,爲干支之一,順序爲第28個 --> 88 --> X 癸巳,爲干支之一,順序爲第30個 --> 90 --> Z 丙戌,爲干支之一,順序爲第23個 --> 93 --> S 辛未,爲干支之一,順序爲第8個 --> 68 --> D 庚辰,爲干支之一,順序爲第17個 --> 77 --> M 癸酉,爲干支之一,順序爲第10個 --> 70 --> F 己卯,爲干支之一,順序爲第16個 --> 76 --> L 癸巳,爲干支之一,順序爲第30個 --> 90 --> Z 古典密碼,待解密字符串爲: XZSDMFLZ 古典密碼以換位、替換爲主,試試常見的古典密碼:換位柵欄、替換凱撒。 這題是這兩種組合,沒有一點提示,很尷尬、、、 首先,柵欄密碼(兩欄)--> 解密:XMZFSLDZ 再用凱撒 --> 解密:SHUANGYU # 0x1 費納姆密碼 費納姆密碼實際上是一種由二進制產生的替換密碼。 這是一種二戰期間德軍使用的密碼,一時令盟軍難以破譯, 其原理主要是把二進制數據每7位分出一組,再和密鑰的每一位異或便可獲得 import re key = 'large' s = '00000100001000001101000001100001010' key = list(key) s = re.findall('.{7}',s) flag = '' for i in range(len(s)): flag += chr(ord(key[i]) ^ int(s[i],2)) print flag 0x2 曼切斯特編碼和差分曼切斯特編碼 在曼徹斯特編碼中,每一位的中間有一跳變,位中間的跳變既做時鐘信號,又做數據信號;從高到低跳變表示"1",從低到高跳變表示"0"。還有一種是差分曼徹斯特編碼,每位中間的跳變僅提供時鐘定時,而用每位開始時有無跳變表示"0"或"1",有跳變爲"0",無跳變爲"1"。 http://www.cnblogs.com/BinB-W/p/5045918.html #!/usr/bin/env python #coding:utf-8 import re hex1 = 'AAAAA56A69AA55A95995A569AA95565556' # # 0x8893CA58 #hex1 = 'AAAAA56A69AA556A965A5999596AA95656' def bintohex(s1): s2 = '' s1 = re.findall('.{4}',s1) print '每個hex分隔:',s1 for i in s1: s2 += str(hex(int(i,2))).replace('0x','') print 'ID:',s2 def diffmqst(s): s1 = '' s = re.findall('.{2}',s) cc = '01' for i in s: if i == cc: s1 += '0' else: s1 += '1' cc = i # 差分加上cc = i print '差分曼切斯特解碼:',s1 bintohex(s1) def mqst(s): #只能算曼切斯特編碼,沒法算差分 mdict = {'5': '00', '6': '01', '9': '10', 'A': '11'} a1 = ''.join(mdict[i] for i in s) a2 = ''.join(mdict[i][::-1] for i in s) print '曼切斯特解碼: ',a1 print '曼切斯特解碼2: ',a2 bintohex(a1) bintohex(a2) if __name__ == '__main__': bin1 = bin(int(hex1,16))[2:] diffmqst(bin1) mqst(hex1) 0x3 輪盤密碼 Wheel Cipher 也是二戰期間的使用的一種密碼,原理大概就是給定一個密碼錶和一個密鑰,根據密鑰對每一列旋轉到第一位(和輪盤同樣), 而後看每一列的字符是否有規律 在ISCC2017上就有這樣一個題, 腳本以下: #coding:utf-8 a =""" ZWAXJGDLUBVIQHKYPNTCRMOSFE KPBELNACZDTRXMJQOYHGVSFUWI BDMAIZVRNSJUWFHTEQGYXPLOCK RPLNDVHGFCUKTEBSXQYIZMJWAO IHFRLABEUOTSGJVDKCPMNZQWXY AMKGHIWPNYCJBFZDRUSLOQXVET GWTHSPYBXIZULVKMRAFDCEONJQ NOZUTWDCVRJLXKISEFAPMYGHBQ XPLTDSRFHENYVUBMCQWAOIKZGJ UDNAJFBOWTGVRSCZQKELMXYIHP MNBVCXZQWERTPOIUYALSKDJFHG LVNCMXZPQOWEIURYTASBKJDFHG JZQAWSXCDERFVBGTYHNUMKILOP """ b="NFQKSEVOQOFNP" c="2,3,7,5,13,12,9,1,8,10,4,11,6" a=a.splitlines() a.pop(0) # print a s = '' t = [] c=c.split(',') for i in range(0,len(c)): #print a[int(c[i])-1].index(b[i])+1 index = a[int(c[i])-1].index(b[i]) a[int(c[i])-1] = a[int(c[i])-1][index:]+a[int(c[i])-1][:index] print a[int(c[i])-1] t.append(a[int(c[i])-1]) # print '交換',i,'和',int(c[i])-1 for y in range(len(t[0])): for x in range(0,len(t)): s += t[x][y] print '第'+str(y)+'列',''.join(s) s = '' 0x4 xxencode XXencode將輸入文本以每三個字節爲單位進行編碼。若是最後剩下的資料少於三個字節,不夠的部份用零補齊。這三個字節共有24個Bit,以6bit爲單位分爲4個組,每一個組以十進制來表示所出現的數值只會落在0到63之間。以所對應值的位置字符代替。它所選擇的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64個字符。跟base64打印字符相比,就是多一個「-」 字符,少一個」/」 字符。 源文本:The quick brown fox jumps over the lazy dog 編碼後:hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNkc+ 解密地址:http://web.chacuo.net/charsetxxencode 0x5 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 0x6 Unicode編碼 Unicode編碼有如下四種編碼方式: 源文本:The &#x [Hex]:The &# [Decimal]:The \U [Hex]:\U0054\U0068\U0065 \U+ [Hex]:\U+0054\U+0068\U+0065 0x7 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 0x8 埃特巴什碼 埃特巴什碼(Atbash Cipher)是一種以字母倒序排列做爲特殊密鑰的替換加密,也就是下面的對應關係: ABCDEFGHIJKLMNOPQRSTUVWXYZ ZYXWVUTSRQPONMLKJIHGFEDCBA 明文:the quick brown fox jumps over the lazy dog 密文:gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt 0x9 dvorak 鍵盤編碼 Dvorak鍵盤是一種將經常使用字母都歸在一塊兒,以期提升打字速度鍵盤佈局。1936年由美國人August Dvorak設計。鍵盤佈局在硬盤裏。如今通用的QWERTY鍵盤,以鍵盤第一排字母的左邊6個字母而得名。 #仿射函數 密文mzdvezc是用仿射函數y=5x+12加密獲得的,試對其解密。 直接一個Python解決問題 #!/usr/bin/env python # -*- coding: utf-8 -*- __Url__ = 'Http://www.purpleroc.com' __author__ = 'Tracy_梓朋' def affine(a, b): pwd_dic = {} for i in range(26): pwd_dic[chr(((a*i+b)%26)+97)] = chr(i+97) return pwd_dic if __name__ == '__main__': pwd_dic = {} pwd = "mzdvezc" #密文mzdvezc plain = [] pwd_dic = affine(5, 12) #5,12 分別爲兩個係數 for i in pwd: plain.append(pwd_dic[i]) print "You Flag is: " + "".join(plain) #異或加密 ##################################################### 小野入侵了一個臺服務器,發現一個保存重要密碼的程序代碼,小野又發現了一些蛛絲馬跡,他能破解麼? 附件: 公司內部密鑰程序.txt 0xBE, 0x2A, 0x28, 0x48, 0x7A, 0x5C, 0x2A, 0x21, 0xCB, 0x93, 0x0D, 0x2A, 0x70, 0x36, 0xD3, 0x4E, 0xC9, 0xB6, 0xCF, 0x3C, 0xB6, 0x71, 0x99, 0xF5, 0x46, 0x69, 0xA1, 0x24, 0xF9, 0x71, 0x70, 0x11, 0x2A, 0x37, 0x31, 0x27, 0x30, 0x16, 0x71, 0x90, 0x26, 0xC9, 0x18, 0x72, 0xC9, 0x09, 0x4E, 0xC9, 0x0B, 0x5E, 0xC9, 0x4B, 0xC9, 0x2B, 0x4A, 0xEF, 0x7F, 0x28, 0x48, 0x7A, 0x5C, 0x37, 0x47, 0xD7, 0xBD, 0x15, 0xBA, 0xD7, 0x22, 0xC9, 0x07, 0x7E, 0xC9, 0x0E, 0x47, 0x3A, 0x41, 0x8F, 0xC9, 0x1B, 0x62, 0x41, 0x9F, 0x71, 0xBD, 0x05, 0xC9, 0x76, 0xF9, 0x41, 0xB7, 0xDB, 0x4D, 0xFC, 0x44, 0x78, 0x86, 0x36, 0x4A, 0x83, 0x88, 0x45, 0x41, 0x92, 0x04, 0xA9, 0xB3, 0x79, 0x16, 0x66, 0x5E, 0x37, 0xA6, 0xC9, 0x1B, 0x66, 0x41, 0x9F, 0x24, 0xC9, 0x7E, 0x39, 0xC9, 0x1B, 0x5E, 0x41, 0x9F, 0x41, 0x6E, 0xF9, 0xD7, 0x1D, 0xE9, 0x15, 0x23, 0x7F, 0x28, 0x48, 0x7A, 0x5C, 0x37, 0xEB, 0x71, 0x99, 0x11, 0x2A, 0x35, 0x34, 0x36, 0x64, 0x2A, 0x14, 0x29, 0x68, 0x7A, 0xC9, 0x86, 0x11, 0x12, 0x12, 0x11, 0xBD, 0x15, 0xBE, 0x11, 0xBD, 0x15, 0xBA, 0xD2, 0xD2, 0xD2, 0xD2 企業加密方式.txt 公司內部全部的加密形式均爲異或加密,且只使用異或加密,加密KEY:0x42 請牢記,保密! 異或完了後,把它放到一個exe的入口點,而後,直接運行exe就能夠彈出flag. ##################################################### #!/usr/bin/env python # -*- coding: utf-8 -*- __Url__ = 'Http://www.purpleroc.com' __author__ = 'Tracy_梓朋' pwd = "BE, 0x2A, 0x28, 0x48, 0x7A, 0x5C, 0x2A, 0x21, 0xCB, 0x93, 0x0D, 0x2A, \ 0x70, 0x36, 0xD3, 0x4E, 0xC9, 0xB6, 0xCF, 0x3C, 0xB6, 0x71, 0x99, 0xF5, 0x46, \ 0x69, 0xA1, 0x24, 0xF9, 0x71, 0x70, 0x11, 0x2A, 0x37, 0x31, 0x27, 0x30, 0x16, \ 0x71, 0x90, 0x26, 0xC9, 0x18, 0x72, 0xC9, 0x09, 0x4E, 0xC9, 0x0B, 0x5E, 0xC9, \ 0x4B, 0xC9, 0x2B, 0x4A, 0xEF, 0x7F, 0x28, 0x48, 0x7A, 0x5C, 0x37, 0x47, 0xD7, \ 0xBD, 0x15, 0xBA, 0xD7, 0x22, 0xC9, 0x07, 0x7E, 0xC9, 0x0E, 0x47, 0x3A, 0x41, \ 0x8F, 0xC9, 0x1B, 0x62, 0x41, 0x9F, 0x71, 0xBD, 0x05, 0xC9, 0x76, 0xF9, 0x41, \ 0xB7, 0xDB, 0x4D, 0xFC, 0x44, 0x78, 0x86, 0x36, 0x4A, 0x83, 0x88, 0x45, 0x41, \ 0x92, 0x04, 0xA9, 0xB3, 0x79, 0x16, 0x66, 0x5E, 0x37, 0xA6, 0xC9, 0x1B, 0x66, \ 0x41, 0x9F, 0x24, 0xC9, 0x7E, 0x39, 0xC9, 0x1B, 0x5E, 0x41, 0x9F, 0x41, 0x6E, \ 0xF9, 0xD7, 0x1D, 0xE9, 0x15, 0x23, 0x7F, 0x28, 0x48, 0x7A, 0x5C, 0x37, 0xEB, \ 0x71, 0x99, 0x11, 0x2A, 0x35, 0x34, 0x36, 0x64, 0x2A, 0x14, 0x29, 0x68, 0x7A, \ 0xC9, 0x86, 0x11, 0x12, 0x12, 0x11, 0xBD, 0x15, 0xBE, 0x11, 0xBD, 0x15, 0xBA, \ 0xD2, 0xD2, 0xD2, 0xD2" key = "0x42" if __name__ == '__main__': cipher = pwd.split(', 0x') #print "".join(cipher) plain = [] temp = [] for i in cipher: open("../../DATA/BASIC05/basic5.bin","ab").write(chr(int(i, 16) ^ int(key, 16))) #print "Flag is: Vk*8wvt&" ############################################ 上次的用完了,我生日又快到了,再給我點流量當生日禮物吧。 http://script.iscc.org.cn/script03/ 看上去像去年的神獸,可其實不是,也不知道是要考啥,有個提示轉流量下限是1G。 因此讓結果等於NAN,無窮小就好了 輸入:99e9999-99e1111 獲得flag: 你打算送我NANMB流量。 謝謝你給我這麼多流量,flag給你了。 flag:{68d43d512ca7214e05acc96cc100515e} ############################################ 波利比奧斯方陣密碼 1 2 3 4 5 1 A B C D E 2 F G H I/J K 3 L M N O P 4 Q Q S T U 5 V W X Y Z 加密實例: 明文: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文: 442315 4145241325 1242345233 213453 2445323543 442315 31115554 143422 #普萊菲爾密碼 加密解密實例(ps:這裏加解密也是橫向編制密碼錶): #!python >>>from pycipher import Playfair >>>Playfair('CULTREABDFGHIKMNOPQSVWXYZ').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG') #輸出'UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV' >>>Playfair('CULTREABDFGHIKMNOPQSVWXYZ').decipher('UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV') #輸出'THEQUICKBROWNFOXIUMPSOVERTHELAZYDOGX' #維吉尼亞密碼 明文: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密鑰(循環使用,密鑰越長相對破解難度越大): CULTURE (2)已知密鑰加解密 #!python >>>from pycipher import Vigenere >>>Vigenere('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG') 'VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK' >>>Vigenere('CULTURE').decipher('VBPJOZGMVCHQEJQRUNGGWQPPKNYINUKRXFK') 'THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG' #格羅斯費爾德密碼(Gronsfeld cipher) #!python >>>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' #自動密鑰密碼 #Porta密碼--Porta密碼(Porta Cipher)是一個由意大利那不勒斯的醫生Giovanni Battista della Porta發明的多表代換密碼,Porta密碼具備加密解密過程的是相同的特色 密表 #!shell 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/ #培根密碼 #!shell 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 #asp混淆加密,VBScript/JScript.Encode aspencode 密文#@~^EQAAAA==V Xlj4UmkaYAUmKN3bAYAAA==^#~@? 丟到http://adophper.com/encode.html解密便可。。 #aaencode 顏文字 直接開發者模式console運行 ?ω??= /`m′)? ~┻━┻ //*′?`*/ ['_']; o=(???) =_=3; c=(?Θ?) =(???)-(???); (?Д?) =(?Θ?)= (o^_^o)/ (o^_^o);(?Д?)={?Θ?: '_' ,?ω?? : ((?ω??==3) +'_') [?Θ?] ,???? :(?ω??+ '_')[o^_^o -(?Θ?)] ,?Д??:((???==3) +'_')[???] }; (?Д?) [?Θ?] =((?ω??==3) +'_') [c^_^o];(?Д?) ['c'] = ((?Д?)+'_') [ (???)+(???)-(?Θ?) ];(?Д?) ['o'] = ((?Д?)+'_') [?Θ?];(?o?)=(?Д?) ['c']+(?Д?) ['o']+(?ω?? +'_')[?Θ?]+ ((?ω??==3) +'_') [???] + ((?Д?) +'_') [(???)+(???)]+ ((???==3) +'_') [?Θ?]+((???==3) +'_') [(???) - (?Θ?)]+(?Д?) ['c']+((?Д?)+'_') [(???)+(???)]+ (?Д?) ['o']+((???==3) +'_') [?Θ?];(?Д?) ['_'] =(o^_^o) [?o?] [?o?];(?ε?)=((???==3) +'_') [?Θ?]+ (?Д?) .?Д??+((?Д?)+'_') [(???) + (???)]+((???==3) +'_') [o^_^o -?Θ?]+((???==3) +'_') [?Θ?]+ (?ω?? +'_') [?Θ?]; (???)+=(?Θ?); (?Д?)[?ε?]='\\'; (?Д?).?Θ??=(?Д?+ ???)[o^_^o -(?Θ?)];(o???o)=(?ω?? +'_')[c^_^o];(?Д?) [?o?]='\"';(?Д?) ['_'] ( (?Д?) ['_'] (?ε?+(?Д?)[?o?]+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+((???) + (?Θ?))+ (c^_^o)+ (?Д?)[?ε?]+(???)+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ (?Θ?)+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((???) + (o^_^o))+ (?Д?)[?ε?]+((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(???)+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ (?Θ?)+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) - (?Θ?))+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+(???)+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?o?]) (?Θ?)) ('_'); #jsfuck 只包含[]()!+六個字符,能夠直接在console控制檯運行獲得flag http://www.jsfuck.com/ #jother 8個少許字符包括:!+()[]{} 直接在瀏覽器(IE能夠)的控制檯裏輸入密文便可執行解密: #brainfuck 只有八種符號,全部的操做都由這八種符號( > < + - . , [ ] )的組合來完成。 明文:hello! #!shell +++++ +++++ [->++ +++++ +++<] >++++ .---. +++++ ++..+ ++.<+ +++++ +++++ [->++ +++++ ++++< ]>+++ ++++. <++++ +++[- >---- ---<] >--.< +++++ ++[-> ----- --<]> ----- ----- .< #ook #和brainfuck是一個本地解密站點,解密便可 Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. #DES 加密方式:DES 密鑰:6XaMMbM7 密文:U2FsdGVkX18IBEATgMBe8NqjIqp65CxRjjMxXIIUxIjBnAODJQRkSLQ/+lHBsjpv1BwwEawMo1c= 若是解密不了,能夠換個網站試試,畢竟Des加密時候的填充、編碼方式都會影響結果(實測這個網站能夠:http://encode.chahuo.com) 明文:ctf{67a166801342415a6da8f0dbac591974} #SHA1加密 #當鋪密碼 就是一種將中文和數字進行轉化的密碼,算法至關簡單:當鋪用的十個數字的暗碼是「由」、「中」、「人」、「工」、「大」、「王」、「夫」、「井」、「羊」、「非」十個字。這種暗碼是以每個字上下左右露出的筆畫的字頭多少來表示數字的。如「由」字上面一豎露出一個頭,爲數字「一」,「中」字上下露出二個字頭,爲數字「二」,「羊」字上下左右露出九個字頭,爲數字「九」,「非」字上下左右共露出十個字頭,爲數字「十」。若是說「夫井」,那就是在說「七八」這個數字了。 密文:羊由大井夫大人王中工 明文:9158753624 #ascii字符偏移 密文 gndk€rlqhmtkwwp}z 2、分析題目 gndk€rlqhmtkwwp}z這個格式像不像flag{*******}? 咱們比較一下"gndk"與"flag"的ASCII碼 gndk的10進制的ASCII碼分別是:103 110 100 107 flag的10進制的ASCII碼分別是 :102 108 97 103 發現ASCII以此減小 1 2 3 4,因此以此類推 可是不知道怎麼處理'€'這個字符,暫時換成別的字符,最後在換成'{' 用python解解決 ######八進制,十六進制###小葵工具 反斜槓加兩位或三位數字,應該是八進制轉義序列,八進制轉ascii,腳本跑一下 \x格式的,看來是16進制,寫個腳本16進制轉ascii \u開頭的16進制Unicode編碼,在線Unicode轉換字符 純數字應該是ascii碼十進制表示,轉爲字符(注意先把中間的逗號刪掉) html轉義字符,能夠用Python解碼(先刪掉中間的空格)詳細教程能夠見Python HTML編碼解碼 繼續Python html解碼 ####殘缺的hash值 小明一直將電腦密碼的哈希值寫在紙上,結果一不當心將墨水撒在了上面,只看獲得前10位是c2979c7124,小明只記得密碼是4位的數字加字母,你能幫小明恢復密碼的哈希值嗎?(提示:flag爲密碼的哈希值) #! /usr/bin/env python # -*- coding: utf-8 -*- import string import hashlib import itertools def md5(cstr): m = hashlib.md5() m.update(cstr) return m.hexdigest().lower() ls = list(string.lowercase) + list(string.uppercase) + list(string.digits) s = 'c2979c7124' for l in list(itertools.permutations(ls,4)): p = ''.join(l) if md5(p)[0:len(s)] == s: print md5(p) exit(0) 或者 <?php $str='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $cou=strlen($str); for($i=0;$i<$cou-1;$i++){ for($j=0;$j<$cou-1;$j++){ for($k=0;$k<$cou-1;$k++){ for($l=0;$l<$cou-1;$l++){ $ret=md5($str[$i].$str[$j].$str[$k].$str[$l]); if(substr($ret,0,10)=='c2979c7124'){ echo $ret;die(); } } } } } ?> #RSA1 #openssl安裝方法:https://www.youtube.com/watch?v=892_4UQy_L8 列置換