BUUCTF 打卡3

本文介绍了几个涉及编码和解密的问题,包括使用MD5进行哈希计算,解决Windows系统密码格式,理解异或操作在字符串加密中的应用,以及通过枚举还原不完整MD5字符串的方法。内容涵盖了编程基础知识和信息安全相关概念。
摘要由CSDN通过智能技术生成

之前一直觉得没有学,所以碰到不会的大概率都会划走。但想想,总该要面对的。
主要是自己太懒了:)。

1. 丢失的MD5

可以看出这段代码是在py2中运行的。
在这里插入图片描述

解出来的就是flag。

2.Alice与Bob

根据题目要求,将素数98554799767分解为101999和966233,并组成新的数101999966233,然后进行md5的32位小写哈希。

import hashlib   
pd = 101999966233
flag = 'flag{' + hashlib.md5(str(pd).encode()).hexdigest() + '}'
print(flag)

在这里插入图片描述

3.Windows系统密码

windows下密码的格式:
Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值
故将这几个hash值进行md5解密尝试,在第3个hash值处尝试成功
在这里插入图片描述

4.权限获得第一步

跟第3题是类似的。
在这里插入图片描述

5.异性相吸

异性相吸?猜测应该是异或吧。搜了一下,确实是异或。但是我一开始写的时候,计算了两个字符串的长度,len(s1) = 38,len(s2) = 19。两倍的关系,我以为是s2中的一个字符与s1中的两个字符(ord()字符化后相加再转成数字)进行异或,并不是;再然后尝试了整体(同上一个括号中的操作)进行异或,也不对。后来才想到了应该是二进制进行异或。
不过值得注意的是粘贴复制过来的会有差错:)。

from Crypto.Util.number import long_to_bytes,bytes_to_long

with open(r'key.txt','rb') as f:
    s1 = f.read()
s1 = bytes_to_long(s1)
print('s1 =',s1)
'''
ss1 = 'asadsasdasdasdasdasdasdasdasdasdqwesqf'
pd1 = str.encode(ss1)
print('ss1 =',bytes_to_long(pd1))
'''
with open(r'cipher.txt','rb') as f:
    s2 = f.read()
s2 = bytes_to_long(s2)
print('s2 =',s2)#906620282978305788368917706917671540766368191598507869056223532353167665764726853132227611
'''
ss2 = 'ἇ̀Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ'
pd2 = str.encode(ss2)
print('ss2 =',bytes_to_long(pd2))#9779571965693530265243919284564937911043110712797968067643010511308831972362658055906540274976809684837525929002499546901951655060
'''
flag = s1 ^ s2
print(long_to_bytes(flag))

6.还原大师

题目虽然给出的是不完整的字符串和MD5,但我们可以进行枚举字符串中缺失的部分,在于MD5的可见部分比对,从而选出最合适的。

不知道这个是不是md5加密之后,里面全为小写字母的原因,只好在进行判断时把字母小写化。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值