加密 Python 状态机

Encrypt a Python state machine

我想创建一个我的用户看不到但可以作为模块导入的有限状态机;或者可能作为要解密和 eval() 的加密文本文件;要么 ???我很乐意接受建议,因为我真的不确定如何进行。

状态机必须保持自然智能属性; 100% 安全隐藏。

我该怎么做?这是我要执行的操作的示例:

import random
import time
import numpy as np

def state_machine(a,b,c):
    # This machine should be hidden from users
    expiration = 1500000000
    if time.time() < expiration:
        state = 0
        if a[-1]>b[-1]<c[-1]:
            state = 1
        elif a[-1]<b[-1]<c[-1]:
            state = -1
        return state
    else:
        return 'subscription expired'

def generate_3_random():
    # Generate some random data for testing purposes
    a = np.random.random(2)
    b = np.random.random(2)
    c = np.random.random(2)
    return a,b,c

a,b,c = generate_3_random()
print [a,b,c]
state = state_machine(a,b,c)
print state

示例输出

>>>[array([ 0.320481  ,  0.83016095]), array([ 0.15776184,  0.35658263]), array([ 0.96922252,  0.78727468])]
3

采用模块路径,用户版本将如下所示:

import my_encrypted_machine
import random
import time
import numpy as np

def generate_3_random():

    # Generate some random data for testing purposes
    a = np.random.random(2)
    b = np.random.random(2)
    c = np.random.random(2)
    return a,b,c

a,b,c = generate_3_random()

print [a,b,c]

state = my_encrypted_machine.state_machine(a,b,c)

print state

然后输出的格式将与上述未受保护的版本相同。

根据您想要实现的目标,您可以做一些事情:

完全隐藏状态机的内部工作原理

如果您真的不想让他们看到代码,请将其放在服务器上,并为他们提供远程 API(REST 左右)以通过网络访问它。 (并确保服务器安全!)然后除非他们侵入您的盒子,否则他们将无法看到您的代码。

暂时阻止您的用户弄清楚它是如何工作的/防止偶然的黑客看到您的代码

混淆代码。有关此主题的想法,请参阅 How do I protect Python code? or how to encrypt python source code?。 TLDR;这是不容易的。使用 python 以外的东西 :)

您使用加密文本文件描述的内容需要您向用户提供解密密钥,这可能意味着他们可以自行解密。