**持续更新**
基础视频
链接: https://pan.baidu.com/s/1eX42AbnJoLdXpbCbz9PV8A
密码: w2ic
链接: https://pan.baidu.com/s/18xtAME2ZTuXP31lSqMfiNA
密码: hq3w
工具
离线
CTFCrackTools
burpsuite
在线
ctf在线工具
ctfhub
密码学基础
古典密码
1.凯撒加密
2.rot13加密(特殊凯撒加密key=13)
2.playfair加密
3.维吉尼亚加密(古典唯一需要密钥)
4.栅栏加密
6.培根加密(全都是由a,b组成)
7.猪圈加密(特殊图形组成)
8.卡尔达诺兰格码
现代密码
一.对称加密
DES
3DES (DES加密3次)
Blowfish
AES (取代DES算法)
IDEA
RC4
RC5
RC6
二.非对称加密
1.rsa
rsa数学基础
rsa加密
ctf中rsa的套路
编码
1.ascii
2.base64
3.url
4.html
5.unicode
6.utf-8
7.摩斯电码 (.和-组成)
8.二维码
9.jother (由[]{}()+!组成,浏览器console解码)
10.jsfuck (由()[]+!组成)
摘要
md5
sha1
其他
键盘加密(按照给定字符序列在键盘上顺序连接组成图形)
数学基础
例题应用
1.(吉林大学ctf社团2020比赛)
#baby math
from math import factorial
from badmonkey import flag
p = 6754809195983416889371518438404230464318771258362527973287334033265667200119099459184180646680169474847824019197256829826149222241090098845978570412659797
def my_wilson(x,p):
return factorial(x)%p
res = my_wilson(p-2333,p)
mid = md5(str(res).encode()).hexdigest()
assert mid == "a3fe2bd4fb7c2f3642d57d67967c649b"
print("Spirit{{{}}}".format(res%(2**100)))
2.(吉林大学ctf社团2020比赛)
# python3
from badmonkey import flag
message = bytes_to_long(flag)
enc = message ^ message>>23
print("enc = ",enc)
# enc = 696190889020604856890193198853561201348825165171326836202150445122902404137656377702109518236445
3.(吉林大学ctf社团2020比赛)
from Crypto.Util.number import *
from badmonkey import flag
m = bytes_to_long(flag)
BITS = m.bit_length()
a,b,c,d = 15,27,19,23
mask1 = 3698415493855604199601451107484163420720646551661606649093806737041154400431942060340531696401
mask2 = 3460949362284136053271491912952156811286686375965162899233783178191434976143378804364416056910
def encrypt(y):
y = y ^ y >> a
y = y ^ y << b & mask1
y = y ^ y << c & mask2
y = y ^ y >> d
return y&((2<<BITS)-1)
enc = encrypt(m)
print("enc = ",enc)
# enc = 1050202800288756594888207862919284086044293654918425636192291797436341243157293011540594049798
4.lcg-5(lcg系列)
from Crypto.Util.number import *
flag = b'Spirit{****************************************}'
plaintext = bytes_to_long(flag)
length = plaintext.bit_length()
a = getPrime(length)
b = getPrime(length)
n = getPrime(length)
seed = plaintext
output = []
for i in range(10):
seed = (a*seed+b)%n
output.append(seed)
print("output = ",output)
# output = [9997297986272510947766344959498975323136012075787120721424325775003840341552673589487134830298427997676238039214108, 4943092972488023184271739094993470430272327679424224016751930100362045115374960494124801675393555642497051610643836, 6774612894247319645272578624765063875876643849415903973872536662648051668240882405640569448229188596797636795502471, 9334780454901460926052785252362305555845335155501888087843525321238695716687151256717815518958670595053951084051571, 2615136943375677027346821049033296095071476608523371102901038444464314877549948107134114941301290458464611872942706, 11755491858586722647182265446253701221615594136571038555321378377363341368427070357031882725576677912630050307145062, 7752070270905673490804344757589080653234375679657568428025599872155387643476306575613147681330227562712490805492345, 8402957532602451691327737154745340793606649602871190615837661809359377788072256203797817090151599031273142680590748, 2802440081918604590502596146113670094262600952020687184659605307695151120589816943051322503094363578916773414004662, 5627226318035765837286789021891141596394835871645925685252241680021740265826179768429792645576780380635014113687982]
所有题的答案