如何使用 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
是加密密钥。
我已经在一个项目上工作了一段时间,下面是我的代码的进展情况
例如,如果我的代码是:
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
是加密密钥。