前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BUU-Crypto-第二章

BUU-Crypto-第二章

作者头像
Baige
发布2022-03-22 11:14:35
5060
发布2022-03-22 11:14:35
举报
文章被收录于专栏:世荣的博客

好耶,排名涨到12000+了,就做了十道题就涨了近4000名,瞬间信心就上来了,同时也说明一个问题,绝大多数萌新就在一开始就放弃了,但是如果能静下心来,慢慢钻研,就能有所突破。

9.Rabbit

代码语言:javascript
复制
题目:U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

Rabbit密码在比赛非常常见,我参加的两场线下赛都遇到了,第一次是刚上大二那会,由于没遇到过这种加密方式还是没能解出来(其实就是我太菜了)

代码语言:javascript
复制
这种加密的特征是:有U2Fsd开头

关于Rabbit加密我在网站上暂时没有找到相关信息,查阅书籍也是一无所获,如果后期有相关的解析,我会更新脚本。 这里就用工具解一次吧

代码语言:javascript
复制
在线解密:
https://www.sojson.com/encrypt_rabbit.html
输出结果:Cute_Rabbit
flag{Cute_Rabbit}

今天中秋节放假,我也去休息了,明天继续续更。

10.篱笆墙的影子

题目描述:

代码语言:javascript
复制
星星还是那颗星星哟 月亮还是那个月亮 山也还是那座山哟 
梁也还是那道梁 碾子是碾子 缸是缸哟 爹是爹来娘是娘 
麻油灯呵还吱吱响 点的还是那么丁点亮 哦哦 
注意:得到的 flag 请包上 flag{} 提交
题目:felhaagv{ewtehtehfilnakgw}

分析一波,这个密文格式看样子是已经有两个大括号了,那么解密就是要把这些字母已一种特定的方式排序。 如果有一定基础的可以看出这是个栅栏密码,那现在就给萌新科普一下:

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般情况不超过30个)

这里再来个简单的例子:

代码语言:javascript
复制
比如明文:THEREISACIPHER
两个一组 得到:TH ER EI SA CI PH ER
先取出第一个字母:TEESCPE
再取出第二个字母:HRIAIHR
连在一起得到密文:TEESCPEHRIAIHR
而解密的时候,我们先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
得到明文:THEREISACIPHER

这里大概就懂原理了吧,那么-上脚本!

代码语言:javascript
复制
def zhalan(e):
    elen = len(e)
    field = []
    for i in range(2, elen):
        if (elen % i == 0):
            field.append(i)

    for f in field:
        b = elen // f
        result = {x: '' for x in range(b)}
        for i in range(elen):
            a = i % b;
            result.update({a: result[a] + e[i]})
        d = ''
        for i in range(b):
            d = d + result[i]
        print(d)
        d.lower()
if __name__ == '__main__':
    e = 'felhaagv{ewtehtehfilnakgw}' 这里是题目给的密文
    zhalan(e)

通常结果会将所有情况输出,我们只要找出带有flag的明文或有特殊意义的字符串就是flag了。

11.RSA

题目:

代码语言:javascript
复制
注意:得到的 flag 请将noxCTF替换为flag格式为flag{}提交。
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

RSA加密算法的知识点:

根据上述的信息,我们简单用Python来写个脚本:

代码语言:javascript
复制
import gmpy2
p=473398607161
q=4511491
e=17
d=gmpy2.invert(e,(q-1)*(p-1))
解释:d = gmpy2.invert(e,n) # 求逆元,de = 1 mod n
print (d)

12.丢失的MD5

题目:

代码语言:javascript
复制
import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print (des)

直接给了一段代码,题目说的是MD5,那么我们从MD5的角度来分析一波。 MD5特征:一般为16或32位(字母+数字) 现在我们就来审计这段代码,尝试改一改,让它能运行起来。 更改脚本:

代码语言:javascript
复制
import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
            #这里改一下,因为MD5哈希运算之前,要对数据进行编码
            m.update('TASC'.encode('utf-8')+chr(i).encode('utf-8')+'O3RJMV'.encode('utf-8')+chr(j).encode('utf-8')+
            'WDJKX'.encode('utf-8')+chr(k).encode('utf-8')+'ZM'.encode('utf-8'))
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print (des)

运行截图:

13.Alice与Bob

题目:

代码语言:javascript
复制
密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有
身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。
下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,
进行md5的32位小写哈希,提交答案。 注意:得到的 flag 请包上 flag{} 提交

这基本上就是一道密码学计算题了,我们计算出值提交即可。 第一步:将大整数分解为两个素数 整数分解(RSA算法),这个数太大了,脚本分解不了,还是上网站解。

代码语言:javascript
复制
网址:http://www.factordb.com/index.php
代码语言:javascript
复制
98554799767<11> = 101999 · 966233

第二步: 小数在前,大数在后,合起来新的数字:101999966233 第三步: 进行md5的32位小写哈希:

14.rsarsa

题目:

代码语言:javascript
复制
Math is cool! Use the RSA algorithm to decode the secret message,
c, p, q, and e are parameters for the RSA algorithm.
p=
964842302901051567659055174001042653494573763923573980064
39893520398525072984913995610350091634270503701075707336333
50911691280297777160200625281665378483

q =  
11874843837980297032092405848653656852760910154543380907
650040190704283358909208578251063047732443992230647903
887510065547947313543299303261986053486569407

e =  65537

c =       
83208298995174604174773590298203639360540024871256126892889
661345742403314929861939100492666605647316646576486526217
457006376842280869728581726746401583705899941768214138
7422596893348407356335530538876418476511737762518202930
872128856701803674068074067659236389731613758173
92737747832762751690104423869019034

RSA前面有讲,现在我们来直接解题。 脚本:

代码语言:javascript
复制
e = 65537
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
n = p*q
#密文
C = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

d = 56632047571190660567520341028861194862411428416862507034762587229995138605649836960220619903456392752115943299335385163216233744624623848874235303309636393446736347238627793022725260986466957974753004129210680401432377444984195145009801967391196615524488853620232925992387563270746297909112117451398527453977

#求明文
M = pow(C,d,n)    #快速求幂取模运算
print(M)
#解出flag{5577446633554466577768879988}

运行截图:

代码语言:javascript
复制
flag:flag{5577446633554466577768879988}

15.大帝的密码武器

题目:

这道题就立马就不一样了,是个不可执行文件,有可能需要我们给它一个属性,试试zip.txt

那么zip.zip呢,再来试试。

不错,来看看题目:

题目说的很明白了已经,应该就是凯撒加密,我们先把题目给的密文解密,得出的密钥再加密给的明文,被加密的密文就是flag了。 开始搞:直接上脚本

代码语言:javascript
复制
str1 = 'FRPHEVGL'
str2 = str1.lower()                                 #转换为小写方便识别
num = 1                                             #偏移量
for i in range(26):
    print("{:<2d}".format(num),end = ' ')
    for temp in str2:
        if(ord(temp)+num > ord('z')):               #如果超出'z',需要重新映射会a~z这26个字母上
            print(chr(ord(temp)+num-26),end = '')
        else:
            print(chr(ord(temp)+num),end = '')
    num += 1
    print('')
    str = 'ComeChina'
    for temp in str:
        if (ord(temp) + 13 > ord('z')):
            print(chr(ord(temp) + 13 - 26), end='')
        else:
            print(chr(ord(temp) + 13), end='')
    print('')

运行结果:

可以看出位移量是13的时候,我们得到明文:security 好,现在用我们得到key去加密题目给的密文。 继续上脚本:

代码语言:javascript
复制
import string
def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k
    lower = string.ascii_lowercase #小写字母
    upper = string.ascii_uppercase #大写字母
    before = string.ascii_letters #无偏移的字母顺序 小写+大写
    after = lower[k:] + lower[:k] + upper[k:] + upper[:k]#偏移后的字母顺序 还是小写+大写
    #分别把小写字母和大写字母偏移后再加到一起 
    table = ''.maketrans(before, after)  #创建映射表
    return s.translate(table) #对s进行偏移 即加密 
s = input('请输入一个字符串:')
k = int(input('请输入一个整数密钥:')) 
print(kaisa(s, k))

运行结果:PbzrPuvan

16.Windows系统密码

题目:

代码语言:javascript
复制
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

尝试用md5解密,无果。 于是对自组字符串都进行了md5,得到了明文,在第二句ctf中。

flag{good-luck} 这道题目没什么好说的,就是考察对被加密的密文特征有一定的判断性,这里补充一下md5加密的特征:
代码语言:javascript
复制
一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串。
如果出现这个范围以外的字符说明这可能是个错误的md5值,就没必要再拿去解密了。
1.确定性:一个原始数据的MD5值是唯一的,同一个原始数据不可能会计算出多个不同的MD5值。
2.碰撞性:原始数据与其MD5值并不是一一对应的,有可能多个原始数据计算出来的MD5值是一样的,这就是碰撞。
3.不可逆:也就是说如果告诉你一个MD5值,你是无法通过它还原出它的原始数据的,这是由它的算法所决定的。
  一个给定的MD5值是可能对应多个原始数据的,并且理论上讲是可以对应无限多个原始数据。
  所有无法确定到底是由哪个原始数据产生的。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 09 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.Rabbit
    • 今天中秋节放假,我也去休息了,明天继续续更。
    • 10.篱笆墙的影子
    • 11.RSA
    • 12.丢失的MD5
    • 13.Alice与Bob
    • 14.rsarsa
    • 15.大帝的密码武器
    • 16.Windows系统密码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档