|
|
@ -3,7 +3,7 @@ import public,os,sys,json |
|
|
|
|
|
|
|
#获取插件列表(0/1) |
|
|
|
def get_plugin_list(force = 0): |
|
|
|
api_root_url = 'http://www.example.com' |
|
|
|
api_root_url = 'https://api.bt.cn' |
|
|
|
api_url = api_root_url+ '/panel/get_plugin_list' |
|
|
|
cache_file = 'data/plugin_list.json' |
|
|
|
|
|
|
@ -123,14 +123,91 @@ def path_check(path): |
|
|
|
|
|
|
|
#数据加密 |
|
|
|
def db_encrypt(data): |
|
|
|
result = {} |
|
|
|
result['status'] = True |
|
|
|
result['msg'] = data |
|
|
|
try: |
|
|
|
key = __get_db_sgin() |
|
|
|
iv = __get_db_iv() |
|
|
|
str_arr = data.split('\n') |
|
|
|
res_str = '' |
|
|
|
for data in str_arr: |
|
|
|
if not data: continue |
|
|
|
res_str += __aes_encrypt(data, key, iv) |
|
|
|
except: |
|
|
|
res_str = data |
|
|
|
result = { |
|
|
|
'status' : True, |
|
|
|
'msg' : res_str |
|
|
|
} |
|
|
|
return result |
|
|
|
|
|
|
|
#数据解密 |
|
|
|
def db_decrypt(data): |
|
|
|
result = {} |
|
|
|
result['status'] = True |
|
|
|
result['msg'] = data |
|
|
|
try: |
|
|
|
key = __get_db_sgin() |
|
|
|
iv = __get_db_iv() |
|
|
|
str_arr = data.split('\n') |
|
|
|
res_str = '' |
|
|
|
for data in str_arr: |
|
|
|
if not data: continue |
|
|
|
res_str += __aes_decrypt(data, key, iv) |
|
|
|
except: |
|
|
|
res_str = data |
|
|
|
result = { |
|
|
|
'status' : True, |
|
|
|
'msg' : res_str |
|
|
|
} |
|
|
|
return result |
|
|
|
|
|
|
|
def __get_db_sgin(): |
|
|
|
keystr = '3gP7+k_7lSNg3$+Fj!PKW+6$KYgHtw#R' |
|
|
|
key = '' |
|
|
|
for i in range(31): |
|
|
|
if i & 1 == 0: |
|
|
|
key += keystr[i] |
|
|
|
return key |
|
|
|
|
|
|
|
def __get_db_iv(): |
|
|
|
div_file = "{}/data/div.pl".format(public.get_panel_path()) |
|
|
|
if not os.path.exists(div_file): |
|
|
|
str = public.GetRandomString(16) |
|
|
|
str = __aes_encrypt_module(str) |
|
|
|
div = public.get_div(str) |
|
|
|
public.WriteFile(div_file, div) |
|
|
|
if os.path.exists(div_file): |
|
|
|
div = public.ReadFile(div_file) |
|
|
|
div = __aes_decrypt_module(div) |
|
|
|
else: |
|
|
|
keystr = '4jHCpBOFzL4*piTn^-4IHBhj-OL!fGlB' |
|
|
|
div = '' |
|
|
|
for i in range(31): |
|
|
|
if i & 1 == 0: |
|
|
|
div += keystr[i] |
|
|
|
return div |
|
|
|
|
|
|
|
def __aes_encrypt_module(data): |
|
|
|
key = 'Z2B87NEAS2BkxTrh' |
|
|
|
iv = 'WwadH66EGWpeeTT6' |
|
|
|
return __aes_encrypt(data, key, iv) |
|
|
|
|
|
|
|
def __aes_decrypt_module(data): |
|
|
|
key = 'Z2B87NEAS2BkxTrh' |
|
|
|
iv = 'WwadH66EGWpeeTT6' |
|
|
|
return __aes_decrypt(data, key, iv) |
|
|
|
|
|
|
|
def __aes_decrypt(data, key, iv): |
|
|
|
from Crypto.Cipher import AES |
|
|
|
import base64 |
|
|
|
encodebytes = base64.decodebytes(data.encode('utf-8')) |
|
|
|
aes = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8')) |
|
|
|
de_text = aes.decrypt(encodebytes) |
|
|
|
unpad = lambda s: s[0:-s[-1]] |
|
|
|
de_text = unpad(de_text) |
|
|
|
return de_text.decode('utf-8') |
|
|
|
|
|
|
|
def __aes_encrypt(data, key, iv): |
|
|
|
from Crypto.Cipher import AES |
|
|
|
import base64 |
|
|
|
data = (lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16).encode('utf-8'))(data.encode('utf-8')) |
|
|
|
aes = AES.new(key.encode('utf8'), AES.MODE_CBC, iv.encode('utf8')) |
|
|
|
encryptedbytes = aes.encrypt(data) |
|
|
|
en_text = base64.b64encode(encryptedbytes) |
|
|
|
return en_text.decode('utf-8') |