用C语言加密/解密Python脚本

2024-06-16 09:50:11 发布

您现在位置:Python中文网/ 问答频道 /正文

重复(我在其中找不到答案): https://stackoverflow.com/questions/4066361/how-to-obfuscate-python-codeHow do I protect Python code?

因此,我查看了上面的两个链接,^^并没有发现对实际加密python脚本和/或混淆python代码有用的内容。因此,我不熟悉C语言,但对python很有经验,如果我想开发商业python项目,我最好的想法是:

创建一个c脚本和一个加密编译的python脚本c脚本只需提供一个字符串加密密钥并对其进行解密。只是因为我从来没有尝试过加密,我知道这不会是完美的。但我不需要完美。我只想让反编译我的python源代码变得更难,因为我意识到这仍然很容易,但并不像那样容易。在

我已经看过Cython,我可以很容易地生成一个*.c文件,现在我如何将它编译成二进制文件?(使用visual studio)

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


Tags: 文件to答案代码https脚本com二进制
3条回答

我要做的是:

1)创建生成密钥并将其存储到文本文件的C脚本

2)在运行Python时,拿起密钥并立即删除文本文件

3)使用密钥解密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)

总而言之,下面是一些伪代码:

^{pr2}$

但为了强调和重要的一点

Python不是为这个而生的!它意味着开放和自由!在

如果你发现自己在这个关头别无选择,你也许应该用另一种语言

纽卡项目。它是一个python编译器,它将python脚本编译为使用libpython运行的本机可执行代码。在

http://nuitka.net/

你没有解释为什么你觉得需要加密/解密。答案可能会实质性地改变所提出的任何建议。在

例如,假设您试图保护知识产权,但喜欢使用python编写代码的便利性。如果这是你的动机,考虑一下cythonhttp://cython.org。在

但是假设你更关心安全性(例如:防止有人在未经用户许可的情况下修改你的代码)。在这种情况下,可以考虑使用某种嵌入式加载器,在调用嵌入式python解释器之前对python源代码进行校验。在

我肯定还有其他的理由要加密。在

相关问题 更多 >