2024长城杯铁人三项, Python代码分析题crypto WP

ord() 返回一个字符十进制的 ascii 码值。
摘要由CSDN通过智能技术生成

ciphertext = ‘’

for each in flag:
for i in range(0,len(key)/2):
# ord() 返回一个字符十进制的 ascii 码值
temp = (ord(key[i * 2]) * ord(each) + ord(key[ i*2 + 1])) % 251

ciphertext += '%02x' % temp

#### 分析 ciphertext 的生成过程


**`ciphertext` 通过追加 `temp` 得到,每次取 `temp` 的前两位并转换为16进制,并且 `ciphertext` 赋值的部分没有写在 `for i` 这个循环中。  
 所以每遍历到 `flag` 的一个字符,`ciphertext` 就追加一次,且每次追加的都是`for i`循环最后一次的结果。**


**所以 `temp` 的算法可以简化为**



> 
> temp = (x \* flag中的每个字符的十进制ascii码值 + y) % 251
> 
> 
> 


**根据 `flag` 的格式, `ciphertext` 中 `cb` 由 `f` 计算得到,`20`由 `l` 计算得到**



> 
> flag = ‘flag{----unkown-----}’
> 
> 
> 


### 获取 flag


**由于取余算法不可逆,所以我们采用爆破的方式,爆破得到可能存在的 `x` 与 `y` 组合,并保存到文件中,`
  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值