我正在 picoCTF(Codebook)上做 CTF,有一个简单的挑战需要解决。但我注意到给定的脚本中有一些我不明白的东西。
其全部内容的代码如下:
def str_xor(secret, key):
#extend key to secret length
new_key = key
i = 0
while len(new_key) < len(secret):
new_key = new_key + key[i]
i = (i + 1) % len(key)
return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)])
我不明白的是变量
secret_c
和new_key_c
从何而来。它们没有被定义,但是可以工作 - 我预计会出现错误。额外的“_c”是否来自某些东西?这是一些与编译相关的Python行为吗?,C?还有别的吗?
这些名称来自列表理解本身 - 特别是
for (secret_c,new_key_c) in zip(secret,new_key)
部分。名称 secret_c
和 new_key_c
用作 zip
返回值的占位符。
您可以随意称呼它们。例如,这会做同样的事情:
return "".join([chr(ord(foo) ^ ord(bar)) for (foo,bar) in zip(secret,new_key)])