CTF學習-密碼學解題思路

CTF學習-密碼學解題思路

密碼學持續更新

密碼學概述

密碼學的發展

  • 第一個階段是從古代到19世紀末-古典密碼 (classical cryptography)
  • 第二個階段從20世紀初到1949年-近代密碼
  • 第三個階段從C.E.Shannon (香農)於1949年發表的劃時代論文 "The Communication Theory ofSecret Systems "開始-現代密碼
  • 第四個階段從1976年W. Diffie和M. Hellman創造性地發表了論文"New Directions in
    Cryptography"開始-公鑰密碼

密碼編碼學

(1)密碼編碼學是密碼學的一個分支,研究與信息安全(例如:機密性、完整性、可鑑別性)有關的數學技術。
(2)密碼編碼學是包含數據變換的原理、工具和方法的一門學科,這種數據變換的目的是爲了隱藏數據的信息內容,阻止對數據的篡改以及防止未經認可使用數據。
(3)密碼編碼學是論述使明文變得不可懂的密文,以及把已加密的消息變換成可懂形式的藝術和技巧。

對稱加密不對稱加密

  • 對稱密碼算法(Symmetric cipher) :加密密鑰和解密密鑰相同,或實質上等同,即從一個易於推出另一個。又稱傳統密碼算法(Conventional cipher)、祕密密鑰算法或單密鑰算法。
    DES、 3DES、 IDEA、 AES

  • 非對稱密碼算法(Asymmetric cipher). : 加密密鑰和解密密鑰不同,從一個很難推出另一個。又叫公鑰密碼算法(Public一key cipher)。其中的加密密鑰可以公開,稱爲公開密鑰(public key),簡稱公鑰;解密密鑰必須保密,稱爲私人密鑰(private key),簡稱私鑰。
    RSA、 ECC、 EIGamal

摘要算法

數據摘要算法是密碼學算法中非常重要的一個分支, 它通過對所有數據提取指紋信息以實現數據簽名、數據完整性校驗等功能,由於其不可逆性,有時候會被用做敏感信息的加密。數據摘要算法也被稱爲哈希(Hash) 算法、散列算法,常見的摘要算法有MD5和SHA
在互聯網上進行大文件傳輸時,都要得用MD5算法產生一個與文件匹配的、存儲MD5值的文本文件(後綴名爲md5或md5sum),這樣接收者在接收到文件後,就可以利用與SFV類似的方法來檢查文件完整性,絕大多數大型軟件公司或開源組織都是以這種方式來校驗數據完整性,而且部分操作系統也使用此算法來對用戶密碼進行加密,另外,它也是目前計算機犯罪中數據取證的最常用算法。
SHA中SHA1的應用較爲廣泛,主要應用於CA和數字證書中,另外在互聯網中流行的BT軟件中,也是使用.SHA1來進行文件校驗的,由於SHA系列算法的數據摘要長度較長,因此其運算速度與MD5相比,也相對較慢。

image-20200815163751484

ASCII編碼

ASCII碼使用指定的7位或8位二進制數組合來表示128或256種可能的字符。標準ASCII碼也叫基礎ASCII碼,使用7位一進制數(剩下的1位一進製爲0)來表示所有的大寫和小寫字母,數字0到9、標點符號,以及在美式英語中使用的特殊控制字符。

Base64編碼

Base64顧名思義就是用64個可顯示字符表示所有的ASC字符,64也就是6Bits, 而ASC字符一共有256個,也就是8Bits。 Base64編碼要求把3個8位字節(38=24)轉化爲4個6位的字節(46=24) ,之後在6位的前面補兩個0,形成8位一個字節的形式。如果剩下的字符不足3個字節,則用0填充,輸出字符使用’=' ,因此編碼後輸出的文本末尾可能會出現1或2個’='

URL編碼

ur|編碼就是一個字符ascii碼的十 六進制。不過稍微有些變動,需要在前面加上“%”。比如"\”,它的ascii碼是92, 92的十六進制是5c,所以"" 的ur|編碼就是%5c。
特點:密文中有多個%號符

Unicode編碼

Unicode碼擴展自ASCII字元集。在嚴格的ASCII中,每個字元用7位元表示,或者電腦上普遍使用的每字元有8位元寬;而Unicode使用全1 6位元字元集。這使得Unicode能夠表示世界上所有的書寫語言中可能用於電腦通訊的字元、象形文字和其他符號。
特點:密文中有多個\uxxx

JS混淆

有些時候開發者爲了保護勞動成果可以通過對javascript的變量名稱和過程名稱進行編碼,從而起到混淆js代碼的作用,通常使用eval函數進行混淆處理,該函數可以計算字符串,並執行其中的JS代碼。
如,對<script>alert( 'XSS' ); </script>進行16進制轉換,然後使用eval函數進行讀取

<script>eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x . 53\x53\x27\x29\x3b"); </script>

特點:通常在JS腳本里使用eval與function函數進行混淆。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章