BUUCTF-crypto1-29
- MD5
- Url编码
- 一眼就解密
- 看我回旋踢
- 摩丝
- [BJDCTF 2nd]签到-y1ng
- password
- 变异凯撒
- Quoted-printable
- Rabbit
- 篱笆墙的影子
- RSA
- 丢失的MD5
- [BJDCTF 2nd]老文盲了
- Alice与Bob
- rsarsa
- 大帝的密码武器
- Windows系统密码
- [BJDCTF 2nd]cat_flag
- [BJDCTF 2nd]燕言燕语-y1ng
- 传统知识+古典密码
- [GKCTF2020]小学生的密码学
- 信息化时代的步伐
- RSA1
- old-fashion
- [BJDCTF 2nd]灵能精通-y1ng
- 权限获得第一步
- 萌萌哒的八戒
- RSA
- RSA2
- RSA3
- [BJDCTF 2nd]Y1nglish-y1ng
- 世上无难事
- 异性相吸
- 还原大师
- [GKCTF2020]汉字的秘密
- ps:
MD5
Url编码
一眼就解密
看我回旋踢
摩丝
[BJDCTF 2nd]签到-y1ng
password
弱口令密码拼凑
变异凯撒
afZ_r ascii 97 102 90 95 114
flag{ ascii 102 108 97 103 123
ascii相差规律,5 6 7 8 9
脚本:
s = "afZ_r9VYfScOeO_UL^RWUc"
re = ""
a = 5
for i in s :
re +=chr(ord(i)+a)
a +=1
print(re)
Quoted-printable
Rabbit
篱笆墙的影子
栅栏密码
RSA
已知p,q,e求d
脚本附上:
import gmpy2
p=473398607161
q=4511491
e=17
gmpy2.mpz(p)
gmpy2.mpz(q)
n = (p-1)*(q-1)
d = gmpy2.invert(e,n)
print(d)
丢失的MD5
运行脚本即可得到flag
[BJDCTF 2nd]老文盲了
奇怪的知识又增加了~
罼雧締眔擴灝淛匶襫黼瀬鎶軄鶛驕鳓哵眔鞹鰝
附上别的师傅的wp.
Alice与Bob
基于大素数分解,解码网站.
flag{d450209323a847c8d01c6be47c81811a}
rsarsa
已知p,q,e,c求m
脚本:
import gmpy2
p=9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q=11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e=65537
c=83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
gmpy2.mpz(p)
gmpy2.mpz(q)
n = (p-1)*(q-1)
d = gmpy2.invert(e,n)
N=p*q
m=gmpy2.powmod(c,d,N)
flag=str(m)
print("flag{"+flag+"}")
大帝的密码武器
凯撒大帝,发现可以组成一个单词
向量为13,加密密文:ComeChina
P换为大写
Windows系统密码
拿ctf用户的hash进行md5解密,第二段解密成功
[BJDCTF 2nd]cat_flag
参考其他师傅的WP
[BJDCTF 2nd]燕言燕语-y1ng
十六进制转换字符,在进行维吉尼亚解密
传统知识+古典密码
参考其他师傅的WP
[GKCTF2020]小学生的密码学
信息化时代的步伐
参考其他师傅的WP
RSA1
已知p,q,dp,dq,c求m
脚本:
import gmpy2
import binascii
def decrypt(dp,dq,p,q,c):
InvQ = gmpy2.invert(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q)
m=(((mp-mq)*InvQ)%p)*q+mq
temp_flag=binascii.unhexlify(hex(m)[2:])
print(temp_flag)
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
decrypt(dp,dq,p,q,c)
某一次比赛中以为是凯撒,但是解不出,赛后看其他队的wp才知道是quipqiup.
转为小写去掉空格再提交
old-fashion
还是词频分析
[BJDCTF 2nd]灵能精通-y1ng
flag{IMKNIGHTSTEMPLAR}
权限获得第一步
萌萌哒的八戒
RSA
从pub.key中提取n,e
得到n去提取p,q,网站:http://www.factordb.com/
得到p,q,n,e求d以及解密flag文件
p=285960468890451637935629440372639283459
q=304008741604601924494328155975272418463
e=65537
n=8693448229604811919066606200349480058890565601720302561721665405
8378322103517
脚本:
import gmpy2
import rsa
e = 65537
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
phin = (q-1)*(p-1)
d = gmpy2.invert(e, phin)
key = rsa.PrivateKey(n, e, int(d), p, q)
with open("flag.enc", "rb+") as f:
f = f.read()
print(rsa.decrypt(f, key))
RSA2
参考.
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
脚本:
import gmpy2 as gp
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
for i in range(1,e): #在范围(1,e)之间进行遍历
if(dp*e-1)%i == 0:
if n%(((dp*e-1)//i)+1) == 0: #存在p,使得n能被p整除
p=((dp*e-1)//i)+1
q=n//(((dp*e-1)//i)+1)
phi=(q-1)*(p-1) #欧拉定理
d=gp.invert(e,phi) #求模逆
m=pow(c,d,n) #快速求幂取模运算
print(m) #10进制明文
print('------------')
print(hex(m)[2:]) #16进制明文
print('------------')
print(bytes.fromhex(hex(m)[2:])) #16进制转文本
RSA3
[BJDCTF 2nd]Y1nglish-y1ng
也是词频分析
BJD{pyth0n_Brut3_f0rc3_oR_quipquip_AI_Cr4cy}把最后一个y改为k
世上无难事
还是词频分析
转为小写
异性相吸
异或字符
脚本:
with open('密文.txt' )as a:
a=a.read()
with open('key.txt' )as b:
b=b.read()
d=''
for i in range(0,len(b)):
c=chr(ord(a[i])^ord(b[i]))
d+=c
print(d)
还原大师
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import hashlib
#print hashlib.md5(s).hexdigest().upper()
k = 'TASC?O3RJMV?WDJKX?ZM'
for i in range(26):
temp1 = k.replace('?',str(chr(65+i)),1)
for j in range(26):
temp2 = temp1.replace('?',chr(65+j),1)
for n in range(26):
temp3 = temp2.replace('?',chr(65+n),1)
s = hashlib.md5(temp3.encode('utf8')).hexdigest().upper()
if s[:4] == 'E903':
print (s)
[GKCTF2020]汉字的秘密
当铺密码 [1] 就是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几。例如:
王夫 井工 夫口 由中人 井中 夫夫 由中大:67 84 70 123 82 77 125
脚本:
dh = '田口由中人工大土士王夫井羊壮'
ds = '00123455567899'
cip = '王壮 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由 土夫 井中 士夫 王工 王人 土由 由口夫'
s = ''
for i in cip:
if i in dh:
s += ds[dh.index(i)]
else:
s += ' '
#print(s)
ll = s.split(" ")
t = ''
for i in range(0,len(ll)):
t += chr(int(ll[i])+i+1)
print('t=', t, '\t\tt.lower()=', t.lower())
ps:
个人站点博客:XingHe,欢迎来踩~