栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【攻防世界】八、掀桌子

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【攻防世界】八、掀桌子

步骤

发现密文如下:
c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2

仔细分析一下密文是由数字0-9和字母a-f组成,可以看出是十六进制的密文,一个十六进制数等于四个二进制数,所以一个字节等于两个十六进制数等于八个二进制数。跟上一题差不多的解法:
直接上python脚本

str_hex = 'c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2'
# 两个十六进制数=八个二进制数=一个字节

flag = ''
# 两个为一组
for i in range(len(str_hex)//2):
    flag += chr(int(str_hex[i*2:(i+1)*2], 16)-128) # 取一个字节转换成十进制,减去128再转换成字符
print(flag)

至于为什么减去128,最坑的就是这了。ascii码的范围是0-127,这里转换为十进制数后明显发现都是大于127的,所以得减去128(我是这样理解的:一个轮回之后会从头重新匹配,比如127->127,128->0,129->1…)

最后提交的时候记得是flag{xxx}的形式,直接提交字符串是错的

总结

密码学的应用(十六进制)
熟悉ASCII码以及各种进制的转换
善于使用代码作为工具

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号