如何使用 python XOR 来解密多行字符串?

How can I get python XOR to Decrypt a Multi-line String?

我已经在一个项目上工作了一段时间,下面是我的代码的进展情况

例如,如果我的代码是:

code = """
def mymath(number):
    return number + 2

print mymath(5)
"""
print code
exec(code)

工作正常,但是,当我加密该信息时 python 只打印/执行一行代码?

code = """NikTUSIgBxwMFB5aSSkaLDApB1h1THk=
cmxVUSE0HhYKB1ISQXViSw==
X0Y=
Ij4cHzthHhUbHRFYDSRHcntBfw==
"""
print decrypt(code)
exec(decrypt(code))

这只是打印:

==== RESTART:
def mathcalc(number):


>>> 

最后,这是我的 Broken 完整代码,如果您需要查看它:

from Crypto.Cipher import XOR
import base64

def encrypt(plaintext):
    cipher = XOR.new('RLuqOAstour9aGoA')
    return base64.b64encode(cipher.encrypt(plaintext))

def decrypt(ciphertext):
    cipher = XOR.new('RLuqOAstour9aGoA')
    return cipher.decrypt(base64.b64decode(ciphertext))


#Code stores the encrypted information
code = """NikTUSIgBxwMFB5aSSkaLDApB1h1THk=
cmxVUSE0HhYKB1ISQXViSw==
X0Y=
Ij4cHzthHhUbHRFYDSRHcntBfw==
"""
print decrypt(code)
exec(code)

我怎样才能 python 对所有代码行执行此操作?我希望它也能够使用 exec() 函数执行。

似乎在创建 code 时,您逐行对 Python 代码进行了 base64 编码。不要那样做。 base64 encoding 并不是要逐个工作,而是要将一个完整的数据块编码为一个单元,因此当解码器看到出现在每一行末尾的 = 符号时,它以为到头了,什么都没有了。

解决这个问题的正确方法是返回到您的原始代码并将 整个 字符串传递给 base64 编码器,而不是一次只传递一行。将其用于 code。你应该只在最后得到等号。

但是,如果你遇到这种情况,又没有原始数据,你可以逐行应用base64解码解密,像这样:

[XOR.new(key).decrypt(base64.b64decode(e)) for e in code.splitlines()]

其中 key 是加密密钥。