BUUCTF-密码学3

1.凯撒?替换?呵呵!

通过题目我们可以先尝试凯撒解密

发现凯撒并没有我们需要的答案,那么说明这并不是凯撒解密,但是又根据题目理解因该是与凯撒十分相近的一种解密方式所以我想到了词频分析:

网站:https://www.quipqiup.com/

通过词频分析的网站分析我们得到了答案及是第一个箭头所指的题目说是答案为小写所以要全部转换成小写

flag为:flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}

2.萌萌哒的八戒

从题目中我们可已发现下面有一串符号通过题目的含义猜测是猪圈解密

根据猪圈密码我们可以得到flag

猪圈解密的网站:https://www.metools.info/code/c90.html

flag为:flag{whenthepigwanttoeat}

3.权限获得第一步

通过题目

我们可以发现这与之前的"信息化时代的步伐"相似

我们选取后面的进行md5进行解密

得到flag为:flag{3617656}

4.传统知识+古典密码

从题目我们可以知道这个与这些年份有关我们可以联想到这些年份对应的编号

通过这个表格我们可以推断出又因为背面写着“+甲子”甲子一轮通过表格可以知道篇为60

所以我们可以计算出来

辛卯:88         丙戌:83          庚辰:70       己卯:76

癸巳:90         辛未:68          癸酉:80       癸巳:90

可以得到:XZSDMFLZ

得到flag为:flag{SHUANGYU}

5.RSA1

通过题目我们而可以得知这是一个dp,dq泄露的rsa

import gmpy2

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

I = gmpy2.invert(q, p)
m1 = pow(c, dp, p)
m2 = pow(c, dq, q)
m = (((m1 - m2) * I) % p) * q + m2

print("Decimal plaintext:", m)                           # 十进制明文
print("Hexadecimal plaintext:", hex(m)[2:])              # 十六进制明文
print("Text:", bytes.fromhex(hex(m)[2:]).decode('utf-8')) # 十六进制转文本

 代码如上答案为flag{W31c0m3_70_Ch1n470wn}

6.世上无难事

通过题目我们可以看出这个是一个次品分析的题目(链接上面第一题是有给的)

通过词频分析我们很容易得到答案

但是因为题目说是小写所以我们需要把分析出来的答案进行大写字母小写后提交的答案才是正确的

# 输入十六进制字符串
hex_string = "640E11012805F211B0AB24FF02A1ED09"

# 将十六进制字符串转换为小写形式
hex_lower = hex_string.lower()

print("Lowercase hexadecimal:", hex_lower)

 flag为:flag{640e11012805f211b0ab24ff02a1ed09}

7.old-fashion

通过题目我们发现这是一个杂乱无序的一段话我们可以猜测这个又是词频分析的问题

可以直接找到答案
flag{n1_2hen-d3_hu1-mi-ma_a}

8.Unencode

通过题目的提醒我们知道了这个解码就是Unencode

 我们通过解密得到了flag

flag为:flag{dsdasdsa99877LLLKK}

9.[AFCTF2018]Morse

通过题目我们可以看出来这是一个摩斯密码解密

解密完发现这串数字有点像16进制我们尝试进行16进制转换成文本

接完发现确实是需要进行16进制的解密

所以答案为:flag{1s't_s0_345y}

10.RSA3

通过题目我们可以知道这是一个共模攻击

python脚本如下

from gmpy2 import invert
import binascii


def common_modulus(n, c1, c2, e1, e2):
    def egcd(a, b):
        if b == 0:
            return a, 0
        else:
            x, y = egcd(b, a % b)
            return y, x - (a // b) * y

    s = egcd(e1, e2)
    s1 = s[0]
    s2 = s[1]

    # 求模反元素
    if s1 < 0:
        s1 = - s1
        c1 = invert(c1, n)
    elif s2 < 0:
        s2 = - s2
        c2 = invert(c2, n)

    # 求解明文
    m = pow(c1, s1, n) * pow(c2, s2, n) % n
    return m


c1 = 22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n = 22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1 = 11187289
c2 = 18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2 = 9647291

result = common_modulus(n, c1, c2, e1, e2)
print("Plaintext (hex):", hex(result)[2:].strip("L"))
print("Plaintext:", binascii.unhexlify(hex(result)[2:].strip("L")))

 flag如下:flag{49d91077a1abcb14f1a9d546c80be9ef}

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值