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` 组合,并保存到文件中,`