buuoj-crypto 1

1.RSA

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17,求d.
在这里插入图片描述

import gmpy2
p=473398607161
q=4511491
e=17
d = gmpy2.invert(e,(q-1)*(p-1))
print(d)

2.Alice与Bob

在这里插入图片描述
分解大整数工具将98554799767分解为101999 · 966233,对新合成的数字101999966233进行md5的32位小写哈希。
哈希计算工具

3.rsarsa

在这里插入图片描述
可用工具求出私钥d=56632047571190660567520341028861194862411428416862507034762587229995138605649836960220619903456392752115943299335385163216233744624623848874235303309636393446736347238627793022725260986466957974753004129210680401432377444984195145009801967391196615524488853620232925992387563270746297909112117451398527453977
再用python函数pow()即可求出flag

e = 65537
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
n = p*q

C = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

d = 56632047571190660567520341028861194862411428416862507034762587229995138605649836960220619903456392752115943299335385163216233744624623848874235303309636393446736347238627793022725260986466957974753004129210680401432377444984195145009801967391196615524488853620232925992387563270746297909112117451398527453977

M = pow(C,d,n)    #快速求幂取模运算
print(M)

4.大帝的密码武器

题目:公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。
密文:ComeChina
用的是凯撒密码,解密FRPHEVGL,当偏移量为13时,得到有意义的单词security。
对ComeChina加密得到flag{PbzrPuvan},要注意大小写。

5.Windows系统密码

在这里插入图片描述
MD5一个个解密,对ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::中的第二条32位字符数据进行MD5解密,得到flag{good-luck}.

6.[BJDCTF 2nd]cat_flag

gif中两种小猫分别对应二进制数0和1,则下图可用二进制表示为
01000010010010100100010001111011010011010010000101100001001100000111111001111101
再将其转换为字符串得到BJD{M!a0~}.
在这里插入图片描述

7.[BJDCTF 2nd]燕言燕语-y1ng

题目:小燕子,穿花衣,年年春天来这里,我问燕子你为啥来,燕子说:
79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D2

考虑是个十六进制序列,将其转化为字符串得yanzi ZJQ{xilzv_iqssuhoc_suzjg}.
猜测使用了维吉尼亚密码,将yanzi作为密钥进行解密得到BJD{yanzi_jiushige_shabi}

8.传统知识+古典密码

在这里插入图片描述
根据六十甲子相关数表得到各个年份对应的数字,根据提示,一甲子为60年,每个数字再加上60,得到八个数字88 90 83 68 77 70 76 90,猜测为ASCII码,解码得到XZSDMFLZ
在这里插入图片描述
古典密码就用栅栏和凯撒密码一次尝试,最后找到SHUANGYU

9.[GKCTF2020]小学生的密码学

e(x)=11x+6(mod26)

密文:welcylk

(flag为base64形式)

观察是仿射加密,解密得到sorcery
在这里插入图片描述

flag为base64形式,转换一下得到flag{c29yY2VyeQ==}

10.信息化时代的步伐

也许中国可以早早进入信息化时代,但是被清政府拒绝了。附件中是数十年后一位伟人说的话的密文。请翻译出明文(答案为一串中文!)
注意:得到的 flag 请包上 flag{} 提交
密文:606046152623600817831216121621196386

标准中文电码:中国汉字多达6万字,常用的汉字只有一万个左右, 所以用10的4次方(10,000)来表示。中文电码表采用了四位阿拉伯数字作代号,简称“四码电报”,从0001到9999按四位数顺序排列,用四位数字表示最多一万个汉字、字母和符号。汉字先按部首,后按笔划排列。字母和符号放到电码表的最尾。

中文电码工具查询对应中文得到:计算机要从娃娃抓起

11.[BJDCTF 2nd]灵能精通-y1ng

身经百战的Y1ng已经达到崇高的武术境界,以自律克己来取代狂热者的战斗狂怒与传统的战斗形式。Y1ng所受的训练也进一步将他们的灵能强化到足以瓦解周遭的物质世界。借由集中这股力量,Y1ng能释放灵能能量风暴来摧毁敌人的心智、肉体与器械。

给文件添加后缀.jpg,得到图片:

在这里插入图片描述
用到的是猪圈密码的变形,圣堂武士密码,解密得到flag{IMKNIGHTSTEMPLAR}。

猪圈密码,一种以格子为基础的简单替代式密码:
圣堂武士密码(Templar Cipher),共济会的“猪圈密码”的一个变种:
在这里插入图片描述

12.RSAROLL

题目给出了n,e,c,发现n比较小,可对n直接进行分解920139713 = 18443 · 49891,从而获得该RSA的私钥。

import gmpy2

n=920139713
e=19
c=[704796792,752211152,274704164,18414022,368270835,483295235,263072905,459788476,483295235,459788476,663551792,475206804,459788476,428313374,475206804,459788476,425392137,704796792,458265677,341524652,483295235,534149509,425392137,428313374,425392137,341524652,458265677,263072905,483295235,828509797,341524652,425392137,475206804,428313374,483295235,475206804,459788476,306220148]
p=18443
q=49891
phin=(p-1)*(q-1)
d=gmpy2.invert(e,phin)
flag=""
for i in c:
    flag=flag+chr(pow(i,d,n))
print(flag)
#flag{13212je2ue28fy71w8u87y31r78eu1e2}

13.坏蛋是雷宾

题目:老牌刺客之王混进了女王的住所。一天,女王得到了一个匿名举报,说她的侍卫里有一个刺客,叫做Rabin,而他的信息就在一份文件里,文件中有附带一个Pk,是523798549,密文是162853095,校验码二进制值是110001,根据说明是放在明文后一起加密的,明文与密文长度相同。加密算法和这位老牌刺客同名。快拯救女王,答案是求得的明文,进行32位md5小写哈希字符串,提交即可。 注意:得到的 flag 请包上 flag{} 提交。

观察到n较小,可直接分解为:523798549 = 10663 · 49123

根据题意可知为Rabin算法。
Rabin是RSA衍生出来的一种算法。这种算法的特点在于e=2,加密方法是在这里插入图片描述
而解密是在这里插入图片描述
然后用扩展欧几里得计算出yq和yp,再用获得的yq和yp解密四个密文
在这里插入图片描述
在这里插入图片描述

import gmpy2

n=523798549
p=10663
q=49123
c=162853095
inv_p = gmpy2.invert(p, q)
inv_q = gmpy2.invert(q, p)

mp = pow(c, 2666, p)
mq = pow(c, 12281, q)

a = (inv_p * p * mq + inv_q * q * mp) % n
b = n - int(a)
c = (inv_p * p * mq - inv_q * q * mp) % n
d = n - int(c)

for i in (a, b, c, d):
    print(bin(i)[2:])

得到了四个解,找到二进制符合题目的解:10010011100100100101010110001,剔除校验位110001。
转十进制再进行32位md5小写哈希得到flag{ca5cec442b2734735406d78c88e90f35}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值