加密 Python 状态机
Encrypt a Python state machine
我想创建一个我的用户看不到但可以作为模块导入的有限状态机;或者可能作为要解密和 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
然后输出的格式将与上述未受保护的版本相同。
根据您想要实现的目标,您可以做一些事情:
完全隐藏状态机的内部工作原理
如果您真的不想让他们看到代码,请将其放在服务器上,并为他们提供远程 API(REST 左右)以通过网络访问它。 (并确保服务器安全!)然后除非他们侵入您的盒子,否则他们将无法看到您的代码。
暂时阻止您的用户弄清楚它是如何工作的/防止偶然的黑客看到您的代码
混淆代码。有关此主题的想法,请参阅 How do I protect Python code? or how to encrypt python source code?。 TLDR;这是不容易的。使用 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
然后输出的格式将与上述未受保护的版本相同。
根据您想要实现的目标,您可以做一些事情:
完全隐藏状态机的内部工作原理
如果您真的不想让他们看到代码,请将其放在服务器上,并为他们提供远程 API(REST 左右)以通过网络访问它。 (并确保服务器安全!)然后除非他们侵入您的盒子,否则他们将无法看到您的代码。
暂时阻止您的用户弄清楚它是如何工作的/防止偶然的黑客看到您的代码
混淆代码。有关此主题的想法,请参阅 How do I protect Python code? or how to encrypt python source code?。 TLDR;这是不容易的。使用 python 以外的东西 :)
您使用加密文本文件描述的内容需要您向用户提供解密密钥,这可能意味着他们可以自行解密。