我正在做加密朋友挑战 5。尝试在 kali Linux 中运行此脚本时,我在第 5 行收到语法错误



编辑:我在OSX上以IDLE运行脚本,它运行顺利,但是当我尝试在kali linux上的gedit中运行它时,我仍然收到语法错误。有什么猜测吗?

这是我得到的语法错误:

./challenge5.py:第 5 行:意外标记 (

./challenge5.py: defencodeRepeatingKeyXor(s, key(:

这是我正在运行的完整脚本:

import binascii
def encodeRepeatingKeyXor(s, key):
return bytes([s[i] ^ key[i % len(key)] for i in range(len(s))])
x = b'''Burning 'em, if you ain't quick and nimble
I go crazy when I hear a cymbal'''
key = b'ICE'
encodedExpectedY = '0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f'
expectedY = binascii.unhexlify(encodedExpectedY)
if __name__ == '__main__':
y = encodeRepeatingKeyXor(x, key)
encodedY = binascii.hexlify(y).decode('ascii')
print(encodedY)
print(encodedExpectedY)
if y != expectedY:
raise Exception(encodedY + ' != ' + encodedExpectedY)

感谢任何和所有的帮助。谢谢!

编辑:我在OSX上的IDLE中运行脚本,它运行顺利,但是当我尝试在kali linux上的gedit中运行它时,我仍然收到语法错误。有什么猜测吗?

bytes(( 和 b'...'不像你期望的那样工作。这是因为它们是不可变的。如果使用字节数组重构代码,它可以工作:

import binascii

def encodeRepeatingKeyXor(s, key):
return bytearray([s[i] ^ key[i % len(key)] for i in range(len(s))])

x = b'''Burning 'em, if you ain't quick and nimble
I go crazy when I hear a cymbal'''
key = b'ICE'
encodedExpectedY = '0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f'
expectedY = binascii.unhexlify(encodedExpectedY)
if __name__ == '__main__':
y = encodeRepeatingKeyXor(bytearray(x), bytearray(key))
encodedY = binascii.hexlify(y).decode('ascii')
print(encodedY)
print(encodedExpectedY)
if y != expectedY:
raise Exception(encodedY + ' != ' + encodedExpectedY)

看看这个问题以进一步阅读。

最新更新