加密Python状态机

2024-04-19 21:59:08 发布

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

我想创建一个有限状态机,我的用户看不到,但可以作为一个模块导入;或者可能作为一个加密的文本文件进行解密和eval();或者???我愿意接受建议,因为我真的不知道该怎么做。你知道吗

  • 它必须能够处理NumPy数组。你知道吗
  • 脚本的其余部分必须对用户开放源代码。你知道吗
  • 这台机器的使用最终会过期。你知道吗

国家机器必须保持自然知识产权;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

然后输出的格式将与上面的非保护版本相同。你知道吗


Tags: 模块用户importnumpyreturntimedefas
1条回答
网友
1楼 · 发布于 2024-04-19 21:59:08

根据你想要达到的目标,你可以做以下几件事:

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

如果你真的不想让他们看到代码,就把它放到服务器上,给他们一个远程API(REST左右)来通过网络访问它。(并保护服务器!)除非他们侵入你的盒子,否则他们就看不到你的代码。你知道吗

暂时阻止您的用户了解它的工作原理/防止普通黑客看到您的代码

混淆代码。有关此主题的想法,请参见How do I protect Python code?how to encrypt python source code?。这不容易。使用python以外的工具:)

用加密文本文件描述的内容需要向用户提供解密密钥,这可能意味着用户可以自己解密。你知道吗

相关问题 更多 >