【攻防世界】八、掀桌子

在这里插入图片描述

步骤

发现密文如下:
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码以及各种进制的转换
善于使用代码作为工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值