bugku_easyXor (0xGame 2020)

首先分析加密过程,密文每个字节都是    当前明文字节异或下一个明文字节

原题:

from random import randint
from secret import flag

flag+="^"
cipher=[]
for i in range(len(flag)-1):
    cipher.append(ord(flag[i])^ord(flag[i+1]))
print(cipher)
#[72, 63, 38, 12, 8, 30, 30, 6, 82, 4, 84, 88, 92, 7, 79, 29, 8, 90, 85, 26, 25, 87, 80, 10, 20, 20, 9, 4, 80, 73, 31, 5, 82, 0, 1, 92, 0, 0, 94, 81, 4, 85, 27, 35]

通过原题可以倒推出:

倒数第一个字节的明文为   35异或94(94是^符号的ASCII值)

倒数第二个字节的明文为   27异或上一个得到的值(即35异或94的结果:125)

......

通过这个规律,解密脚本如下:

#密文列表
cipher=[72, 63, 38, 12, 8, 30, 30, 6, 82, 4, 84, 88, 92, 7, 79, 29, 8, 90, 85, 26, 25, 87, 80, 10, 20, 20, 9, 4, 80, 73, 31, 5, 82, 0, 1, 92, 0, 0, 94, 81, 4, 85, 27, 35]
xor=94  # ^的ASCII码
flag_list=[]    #flag列表(存储flag的数字)

for i in range(len(cipher)-1,-1,-1):    #逆序解密
    #print(cipher[i],xor,cipher[i]^xor)  
    xor=cipher[i]^xor                   #当前的异或密钥是   密文异或之前的异或密钥
    flag_list.append(xor)               #添加本次的异或结果,此结果既为本次的明文,也为下一次循环的异或密钥
    
print(flag_list)    #输出数字表示 (逆序)
flag = ''.join([chr(flag_list[i]) for i in range(len(flag_list)-1,-1,-1)])
print(flag)         #输出字符结果 (正序)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值