2 3 4 5 6 7 8 9 10 11 12

BUUCTF-加密2

丢失的MD5

打开题目,下载压缩包,得到一个 md5.py的脚本,拿去运行即可得到flag。

Alice与Bob

由题目意思得需要拿去分解出俩素数

在线分解质因数计算器工具 http://tools.jb51.net/jisuanqi/factor_calc

根据题目要求得出的数排序为:101999966233( 分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希)加密后得到flag。

md5加密,sha1加密--md5在线解密 (cmd5.com)

rsarsa

根据题目与解压出来文本的内容,可以知道这是rsa算法。

将对应的值输入RSA-Tool 2 by tE!工具,记得公钥为10进制需要转化为16进制

实在不记得操作,可以参考上面的RSA,那里的步骤较详细。

得到私钥d后,在将相应的值放于脚本,使用python函数pow() 脚本运行出flag。

脚本如下:

e = 65537
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
n = p*q
#密文
C = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

d = 56632047571190660567520341028861194862411428416862507034762587229995138605649836960220619903456392752115943299335385163216233744624623848874235303309636393446736347238627793022725260986466957974753004129210680401432377444984195145009801967391196615524488853620232925992387563270746297909112117451398527453977

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

大帝的密码武器

打开题目得到一个zip,这也提示着我们这是一个zip的压缩包,所以需要我们改后缀名为zip。

有题目得出这是大帝的,所以可以大概猜出是凯撒密码,该题可以有两种解法。

(1)可以使用该工具:http://www.ctftools.com/down/down/passwd/

该图来自网上优秀博主。

由于有意义的数字在第13个,实验偏移位数为13,然后拿去凯撒解密即可得到flag

(2)可以使用脚本来运行得出

s = 'FRPHEVGL'
for i in range(1,26):
    flag = ''
    for j in s:
        x = ord(j) - i
        if x < 65:
            x += 26
        flag += chr(x)
    print(i,flag)

s = 'ComeChina'
flag = ''
key = 13
for i in s:
    x = ord(i) + key
    if i >= "A" and i <= "Z" and x > 90 :
        x -= 26
    if i >= "a" and i <= "z" and x > 122 :
        x -= 26
    flag += chr(x)
print(flag)

Windows系统密码

下载压缩包,打开里面文本得到以下内容。

根据文本提示是hash算法,所以使用md5进行解密

可仔细查看文本,可以发现出现ctf,所以应该拿其后面的每一个字段去解码试试(注意:类型为NTLM),看哪一个是flag.

信息化时代的步伐

下载压缩包,打开里面文本得到以下内容。根据题目提示是flag是一串中文。

文本内容是一串数字,用数字转化为中文,可以使用https://www.qqxiuzi.cn/bianma/dianbao.php(电报码在线翻译工具)

中文电码采用了四位阿拉伯数字作代号,从0001到9999按四位数顺序排列,用四位数字表示最多一万个汉字、字母和符号。汉字先按部首,后按笔划排列。字母和符号放到电码表的最尾。后来由于一万个汉字不足以应付户籍管理的要求,又有第二字面汉字的出现。在香港,两个字面都采用同一编码,由输入员人手选择字面;在台湾,第二字面的汉字会在开首补上“1”字,变成5个数字的编码。

传统知识+古典密码

下载压缩包,打开里面文本得到以下内容。

根据六十甲子顺序表,可以得出信中的不同年份的数字(并且信的背面还有“+甲子”==“+60”):88 90 83 68 77 70 76 90 再将其转换为ASCII,ASCII码为XZSDMFLZ(图来源于网上)

因为是古典密码,想到栅栏密码和凯撒密码,先用栅栏密码解码,再用凯撒密码解码.

先对XZSDMFLZ栅栏加密,然后对XMZFSLDZ进行凯撒解密(偏移量为5)

偏移位移的计算由 大帝的密码武器 中有具体详解

凯撒?替换?呵呵!

根据题目的意思,将题目的内容进行凯撒解密肯定是得不到答案的(偏移位移7)

由于得到的是FMAC,并不是我们期望的flag

凯撒密码一般就是26个字母经过单纯的按字母顺序来位移的加密方法(一般)
如:abc=def
进阶版的凯撒就不按照字母顺序的加密
如:abc=dhj
所以就要经过暴力破解出每一种可能的对应加密

前面的MTHJ和字符串中间的{}是明显的flag{}的格式

然后就要对字符串中的其他20个字母进行爆破对比

使用quipqiup https://quipqiup.com/ 来爆破各种明文

flag是第一个,提交时根据题目里面只有小写字母,所以需要删除里面的所有空格

RSA1

下载压缩包,打开里面文本得到以下内容。

使用脚本来运行即可得到

import gmpy2
 
p =8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
n = p * q
 
I = gmpy2.invert(p, q)                      #I为p(mod q)的逆元,即p*I = 1(mod q)
mp = gmpy2.powmod(c, dp, p)                 #计算mp = c^dp % p
mq = gmpy2.powmod(c, dq, q)                 #计算mq = c^dq % q        
 
m = (mp + (I * (mq - mp)) * p) % n          #明文求解公式
m = hex(m)[2:]                              #转十六进制数据
 
flag = ''
for i in range(len(m)//2):
    flag += chr(int(m[i*2:(i+1)*2], 16))
 
print(flag)

想了解里面的变量的用法可以参考:(43条消息) BUUCTF RSA1 解题代码以及详细公式推导_晓寒的博客-CSDN博客

posted @ 2021-10-22 08:50  MrDevil  阅读(213)  评论(0)    收藏  举报