CTF之加解密總結


CTF之加解密總結

0x01 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個’=’
內存1個字符占8位

例如

轉前: s 1 3
先轉成ascii:對應 115 49 51
2進制: 01110011 00110001 00110011
6個一組(4組) 011100110011000100110011
然后才有后面的 011100 110011 000100 110011
然后計算機是8位8位的存數 6不夠,自動就補兩個高位0了
所有有了 高位補0
科學計算器輸入 00011100 00110011 00000100 00110011
得到 28 51 4 51
查對下照表 c z E z

形式

ZXZhbCgkX1BPU1RbcDRuOV96MV96aDNuOV9qMXVfU2gxX0oxM10pNTU2NJC3ODHHYWJIZ3P4ZWY=

在線base64解密

0x02 Base32

Base32和Base64相比只有一個區別就是,用32個字符表示256個ASC字符,也就是說5個ASC字符一組可以生成8個Base字符。

Base32解密
注:以上兩種編碼都可以使用python的base64模塊來加解密

0x03 培根密碼

培根密碼,培根所用的密碼是一種本質上用二進制數設計的,沒有用通常的0和1來表示,而是采用a和b
密文形式是明顯兩個不同的字符。如大寫字母和小寫字母,英文和數字,斜體和正體。

例如

DEath IS JUST A PaRT oF lIFE,sOMeTHInG wE'RE aLL dESTInED TO dO.

是大寫小寫兩個不同的字符
大寫用a表示,小寫用b表示
選取5個一組
DEath aabbb    
ISJUS aaaaa 
TAPaR aaaba 
ToFlI ababa 
FEsOM aabaa 
eTHIn baaab 
GwERE abaaa 
aLLdE baaba
STInE aaaba 
DTOdO aaab
按照上述的形式去在表里找對應得明文.

第一種方式

A aaaaa B aaaab C aaaba D aaabb
E aabaa F aabab G aabba H aabbb
I abaaa J abaab K ababa L ababb
M abbaa N abbab O abbba P abbbb
Q baaaa R baaab S baaba T baabb
U babaa V babab W babba X babbb
Y bbaaa Z bbaab

第二種方式

a AAAAA g AABBA n ABBAA t BAABA
b AAAAB h AABBB o ABBAB u-v BAABB
c AAABA i-j ABAAA p ABBBA w BABAA
d AAABB k ABAAB q ABBBB x BABAB
e AABAA l ABABA r BAAAA y BABBA
f AABAB m ABABB s BAAAB z BABBB
培根密碼在線解密

0x04

摩爾斯電碼是一種早期的數字化通信形式,但是它不同於現代只使用零和一兩種狀態的二進制代碼,它的代碼包括五種: 點、划、點和划之間的停頓、每個字符間短的停頓(在點和划之間)、每個詞之間中等的停頓以及句子之間長的停頓。
形如:– — .-. … .
解密對照下圖摩斯密碼表:

摩斯密碼在線解密

0x05 JsFuck

JSFuck 可以讓你只用 6 個字符 !+ 來編寫 JavaScript 程序。
[][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+ []]]]][([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]]]+([][[]]+[])[+[[+!+[]]]]+(![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[+!+[]]]]+([][[]]+[])[+[[+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]]]+(!![]+[])+[[+!+[]]]][+[[+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]+(!![]+[])[+[[+[]]]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[+!+[]]]+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+[+!+[]]+([][(![]+[])[+[[+[]]]]+([][[]]+[])[+[[!+[]+!+[]+!+[]+!+[]+!+[]]]]+(![]+[])[+[[!+[]+!+[]]]]+(!![]+[])[+[[+[]]]]+(!![]+[])[+[[!+[]+!+[]+!+[]]]]+(!![]+[])[+[[+!+[]]]]]+[])[+[[+!+[]]]+[[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]]])()

其他的一些表達:
false => ![]
true => !![]
undefined => [][[]]
NaN => +[![]]
0 => +[]
1 => +!+[]
2 => !+[]+!+[]
10 => [+!+[]]+[+[]]
Array => []
Number => +[]
String => []+[]
Boolean => ![]
Function => []["filter"]
eval => []["filter"]"constructor"()
window => []["filter"]["constructor"]("return this")()
可以使用firebug直接解密.
JsFuck在線解密

0x06 柵欄密碼

所謂柵欄密碼,就是把要加密的明文分成N個一組,然后把每組的第1個字連起來,形成一段無規律的話。 不過柵欄密碼本身有一個潛規則,就是組成柵欄的字母一般不會太多。(一般不超過30個,也就是一、兩句話)

例如

明文:THERE IS A CIPHER
去掉空格后變為:THEREISACIPHER
兩個一組,得到:TH ER EI SA CI PH ER
先取出第一個字母:TEESCPE
再取出第二個字母:HRIAIHR
連在一起就是:TEESCPEHRIAIHR
還原為所需密碼。
而解密的時候,我們先把密文從中間分開,變為兩行:
T E E S C P E
H R I A I H R
再按上下上下的順序組合起來:
THEREISACIPHER
分出空格,就可以得到原文了:
THERE IS A CIPHER

例如密文:NlEyQd{seft}
N l 
E y 
Q d 
{ s 
e f
 t }
NEQ{etIydsf}

附帶柵欄py腳本


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM