gpt4 book ai didi

python - 在 C 中加密/取消加密 Python 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 08:45:25 28 4
gpt4 key购买 nike

重复(我还没有找到答案): https://stackoverflow.com/questions/4066361/how-to-obfuscate-python-code How do I protect Python code?

所以我查看了上面的两个链接 ^^,但我没有发现任何对实际加密 python 脚本和/或混淆 python 代码有用的东西。所以我是 C 的新手,但在 python 方面有经验,如果我想开发商业 python 项目,我最好的想法是:

创建一个 c 脚本和一个加密和编译的 python 脚本 C 脚本只需要提供一个字符串加密 key 并对其进行解密。仅供引用,我从未真正尝试过加密,而且我知道这并不完美。但我不需要完美。我只是想让反编译我的 python 源代码变得更难,意识到这仍然很容易,但不是 AS 容易。

我目前已经看过 Cython,我可以轻松生成一个 *.c 文件,现在我该如何将其编译为二进制文件? (用 Visual Studio )

那么我如何加密我的 python 代码并从 C 脚本解密它(我可以将其编译为二进制文件,使其更难编辑)?

最佳答案

这是我会做的:

1) 创建一个生成 key 并将其存储到文本文件的 C 脚本

2)拿起 key ,运行Python后立即删除文本文件

3) 使用 key 解密 Python 代码中真正重要的部分(确保没有这些位会破坏您的脚本)然后全部导入

4) 立即重新加密重要的Python位,并删除.pyc文件

这将是可以击败的,但你可以接受。

要加密和重新加密您的 python 位,请尝试以下代码:

from hashlib import md5
from Crypto.Cipher import AES
from Crypto import Random

def encrypt(in_file, out_file, password, key_length=32):
bs = AES.block_size
salt = Random.new().read(bs - len('Salted__'))
key, iv = derive_key_and_iv(password, salt, key_length, bs)
cipher = AES.new(key, AES.MODE_CBC, iv)
out_file.write('Salted__' + salt)
finished = False
while not finished:
chunk = in_file.read(1024 * bs)
if len(chunk) == 0 or len(chunk) % bs != 0:
padding_length = (bs - len(chunk) % bs) or bs
chunk += padding_length * chr(padding_length)
finished = True
out_file.write(cipher.encrypt(chunk))

def decrypt(in_file, out_file, password, key_length=32):
bs = AES.block_size
salt = in_file.read(bs)[len('Salted__'):]
key, iv = derive_key_and_iv(password, salt, key_length, bs)
cipher = AES.new(key, AES.MODE_CBC, iv)
next_chunk = ''
finished = False
while not finished:
chunk, next_chunk = next_chunk, cipher.decrypt(in_file.read(1024 * bs))
if len(next_chunk) == 0:
padding_length = ord(chunk[-1])
chunk = chunk[:-padding_length]
finished = True
out_file.write(chunk)

总结一下,这里有一些伪代码:

def main():
os.system("C_Executable.exe")

with open("key.txt",'r') as f:
key = f.read()

os.remove("key.txt")


#Calls to decrpyt files which look like this:
with open("Encrypted file name"), 'rb') as in_file, open("unecrypted file name"), 'wb') as out_file:
decrypt(in_file, out_file, key)

os.remove("encrypted file name")

import fileA, fileB, fileC, etc

global fileA, fileB, fileC, etc

#Calls to re-encrypt files and remove unencrypted versions along with .pyc files using a similar scheme to decryption calls

#Whatever else you want

但只是为了强调和重要的一点,

Python 不是为此而生的!它应该是开放和免费的!

如果你发现自己在这个时刻没有其他选择,你可能应该使用不同的语言

关于python - 在 C 中加密/取消加密 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864682/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com