style: modify code style

This commit is contained in:
sangge 2023-11-29 16:28:59 +08:00
parent 217c8c1614
commit ea5b6c7b85
5 changed files with 391 additions and 144 deletions

View File

@ -1,19 +1,19 @@
import re import re
import pymysql import pymysql # pylint: disable=e0401 # type: ignore
# 拆分sql对象 # 拆分sql对象
def extract_tables(sql_statement): def extract_tables(sql_statement):
# 使用正则表达式匹配FROM关键字之后的表名以及逗号分隔的表名 # 使用正则表达式匹配FROM关键字之后的表名以及逗号分隔的表名
pattern = r'FROM\s+([\w\s,]+)' pattern = r"FROM\s+([\w\s,]+)"
matches = re.findall(pattern, sql_statement, re.IGNORECASE) matches = re.findall(pattern, sql_statement, re.IGNORECASE)
# 提取逗号分隔的表名,并按逗号进行分割 # 提取逗号分隔的表名,并按逗号进行分割
tabs = re.split(',', matches[0].strip()) tabs = re.split(",", matches[0].strip())
# 处理每个表名,去除空格和其他无关字符 # 处理每个表名,去除空格和其他无关字符
cleaned_tables = [] cleaned_tables = []
for tab in tabs: for tab in tabs:
cleaned_tab = tab.strip() cleaned_tab = tab.strip()
if ' ' in cleaned_tab: if " " in cleaned_tab:
cleaned_tab = cleaned_tab.split()[0] cleaned_tab = cleaned_tab.split()[0]
cleaned_tables.append(cleaned_tab) cleaned_tables.append(cleaned_tab)
return cleaned_tables # 返回列表 return cleaned_tables # 返回列表
@ -25,12 +25,12 @@ def divide_sql(sql):
例如sql = "SELECT a FROM data1, data2, data3 WHERE a = b ORDER BY misc" 例如sql = "SELECT a FROM data1, data2, data3 WHERE a = b ORDER BY misc"
拆分原语句 拆分原语句
""" """
parts = re.split(r'(?i)from\s', sql) # 拆分"from "【无论大小写】 parts = re.split(r"(?i)from\s", sql) # 拆分"from "【无论大小写】
head = parts[0] + "from " # SELECT a FROM head = parts[0] + "from " # SELECT a FROM
divide_sqls = [] divide_sqls = []
if re.search(r'where', parts[1], flags=re.IGNORECASE): if re.search(r"where", parts[1], flags=re.IGNORECASE):
data = re.split(r'(?i) where', parts[1]) # 拆分" where"【无论大小写】 data = re.split(r"(?i) where", parts[1]) # 拆分" where"【无论大小写】
tail = " where" + data[1] # WHERE a = b ORDER BY misc tail = " where" + data[1] # WHERE a = b ORDER BY misc
# message_p = "涉及到的数据源有:" # message_p = "涉及到的数据源有:"
# print(message_p) # print(message_p)
@ -64,7 +64,13 @@ class SelectDatabase: # 定义类
def ret_hospital(self): # 定义函数返回字典——医院HOS这个表 def ret_hospital(self): # 定义函数返回字典——医院HOS这个表
# 连接服务器Server的数据库: # 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8') db = pymysql.connect(
host="localhost",
user="root",
password="111111",
db=f"{self.database}",
charset="utf8",
)
# 使用操作游标: # 使用操作游标:
cursor = db.cursor() cursor = db.cursor()
sql = """SELECT * FROM HOS""" sql = """SELECT * FROM HOS"""
@ -108,7 +114,13 @@ class SelectDatabase: # 定义类
def ret_doctor(self): # 定义函数返回字典——医生DOC这个表 def ret_doctor(self): # 定义函数返回字典——医生DOC这个表
# 连接服务器Server的数据库: # 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8') db = pymysql.connect(
host="localhost",
user="root",
password="111111",
db=f"{self.database}",
charset="utf8",
)
# 使用操作游标: # 使用操作游标:
cursor = db.cursor() cursor = db.cursor()
sql = """SELECT * FROM DOC""" sql = """SELECT * FROM DOC"""
@ -147,7 +159,13 @@ class SelectDatabase: # 定义类
def ret_patient(self): # 定义函数返回字典——病人PAT这个表 def ret_patient(self): # 定义函数返回字典——病人PAT这个表
# 连接服务器Server的数据库: # 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8') db = pymysql.connect(
host="localhost",
user="root",
password="111111",
db=f"{self.database}",
charset="utf8",
)
# 使用操作游标: # 使用操作游标:
cursor = db.cursor() cursor = db.cursor()
sql = """SELECT * FROM PAT""" sql = """SELECT * FROM PAT"""
@ -182,7 +200,13 @@ class SelectDatabase: # 定义类
def ret_diagnosis(self): # 定义函数返回字典——诊断DIA这个表 def ret_diagnosis(self): # 定义函数返回字典——诊断DIA这个表
# 连接服务器Server的数据库: # 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8') db = pymysql.connect(
host="localhost",
user="root",
password="111111",
db=f"{self.database}",
charset="utf8",
)
# 使用操作游标: # 使用操作游标:
cursor = db.cursor() cursor = db.cursor()
sql = """SELECT * FROM DIA""" sql = """SELECT * FROM DIA"""
@ -228,7 +252,13 @@ class SelectDatabase: # 定义类
def ret_define(self, sql): # 定义函数,返回自定义信息的字典 def ret_define(self, sql): # 定义函数,返回自定义信息的字典
# 连接服务器Server的数据库: # 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8') db = pymysql.connect(
host="localhost",
user="root",
password="111111",
db=f"{self.database}",
charset="utf8",
)
try: try:
# 使用操作游标: # 使用操作游标:
cursor = db.cursor() cursor = db.cursor()
@ -253,12 +283,12 @@ def main(hospital_name):
PAT.PAT_ID = DIA.PAT_ID PAT.PAT_ID = DIA.PAT_ID
""" """
hospital_name = hospital_name.replace("\n", "") hospital_name = hospital_name.replace("\n", "")
if hospital_name == 'xx大学附属医院': if hospital_name == "xx大学附属医院":
database = SelectDatabase('Hospital1') database = SelectDatabase("Hospital1")
database.ret_define(sql) database.ret_define(sql)
elif hospital_name == 'xx阳光社区附属医院': elif hospital_name == "xx阳光社区附属医院":
database = SelectDatabase('Hospital2') database = SelectDatabase("Hospital2")
database.ret_define(sql) database.ret_define(sql)
else: else:

View File

@ -1,3 +1,3 @@
# mimajingsai_2 # mimajingsai_2
杨云翔余骊澄黄海锐队伍的作品 杨云翔余骊澄黄海锐队伍的作品

View File

@ -1,18 +1,25 @@
import wx import wx # pylint: disable=e0401 # type: ignore
import wx.xrc import wx.xrc # pylint: disable=e0401 # type: ignore
class MyFrame(wx.Frame): class MyFrame(wx.Frame):
def __init__(self, parent): def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"安全多方服务器平台", pos=wx.DefaultPosition, wx.Frame.__init__(
size=wx.Size(444, 749), self,
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) parent,
id=wx.ID_ANY,
title="安全多方服务器平台",
pos=wx.DefaultPosition,
size=wx.Size(444, 749),
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
)
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
self.SetFont(wx.Font(5, 70, 90, 90, False, "宋体")) self.SetFont(wx.Font(5, 70, 90, 90, False, "宋体"))
self.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW)) self.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) self.SetBackgroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)
)
fgSizer1 = wx.FlexGridSizer(0, 2, 0, 0) fgSizer1 = wx.FlexGridSizer(0, 2, 0, 0)
fgSizer1.SetFlexibleDirection(wx.BOTH) fgSizer1.SetFlexibleDirection(wx.BOTH)
@ -20,51 +27,81 @@ class MyFrame(wx.Frame):
bSizer11 = wx.BoxSizer(wx.VERTICAL) bSizer11 = wx.BoxSizer(wx.VERTICAL)
self.m_bitmap11 = wx.StaticBitmap(self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(70, 30), 0) self.m_bitmap11 = wx.StaticBitmap(
self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(70, 30), 0
)
bSizer11.Add(self.m_bitmap11, 0, wx.ALL, 5) bSizer11.Add(self.m_bitmap11, 0, wx.ALL, 5)
self.m_staticline211 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL) self.m_staticline211 = wx.StaticLine(
self.m_staticline211.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL
)
self.m_staticline211.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
)
self.m_staticline211.SetMaxSize(wx.Size(80, -1)) self.m_staticline211.SetMaxSize(wx.Size(80, -1))
bSizer11.Add(self.m_staticline211, 0, wx.EXPAND | wx.ALL, 5) bSizer11.Add(self.m_staticline211, 0, wx.EXPAND | wx.ALL, 5)
self.m_staticText1 = wx.StaticText(self, wx.ID_ANY, u"接收记录", wx.DefaultPosition, wx.Size(-1, 30), 0) self.m_staticText1 = wx.StaticText(
self, wx.ID_ANY, "接收记录", wx.DefaultPosition, wx.Size(-1, 30), 0
)
self.m_staticText1.Wrap(-1) self.m_staticText1.Wrap(-1)
self.m_staticText1.SetFont(wx.Font(11, 70, 90, 90, False, "宋体")) self.m_staticText1.SetFont(wx.Font(11, 70, 90, 90, False, "宋体"))
self.m_staticText1.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_staticText1.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer11.Add(self.m_staticText1, 0, wx.ALL, 5) bSizer11.Add(self.m_staticText1, 0, wx.ALL, 5)
self.m_bitmap1 = wx.StaticBitmap(self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(70, 111), 0) self.m_bitmap1 = wx.StaticBitmap(
self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(70, 111), 0
)
bSizer11.Add(self.m_bitmap1, 0, wx.ALL, 5) bSizer11.Add(self.m_bitmap1, 0, wx.ALL, 5)
self.m_staticline21 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL) self.m_staticline21 = wx.StaticLine(
self.m_staticline21.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL
)
self.m_staticline21.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
)
self.m_staticline21.SetMaxSize(wx.Size(80, -1)) self.m_staticline21.SetMaxSize(wx.Size(80, -1))
bSizer11.Add(self.m_staticline21, 0, wx.EXPAND | wx.ALL, 5) bSizer11.Add(self.m_staticline21, 0, wx.EXPAND | wx.ALL, 5)
self.m_staticText11 = wx.StaticText(self, wx.ID_ANY, u"发送记录", wx.DefaultPosition, wx.Size(-1, 30), 0) self.m_staticText11 = wx.StaticText(
self, wx.ID_ANY, "发送记录", wx.DefaultPosition, wx.Size(-1, 30), 0
)
self.m_staticText11.Wrap(-1) self.m_staticText11.Wrap(-1)
self.m_staticText11.SetFont(wx.Font(11, 70, 90, 90, False, "宋体")) self.m_staticText11.SetFont(wx.Font(11, 70, 90, 90, False, "宋体"))
self.m_staticText11.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_staticText11.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer11.Add(self.m_staticText11, 0, wx.ALL, 5) bSizer11.Add(self.m_staticText11, 0, wx.ALL, 5)
self.m_bitmap12 = wx.StaticBitmap(self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(70, 111), 0) self.m_bitmap12 = wx.StaticBitmap(
self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(70, 111), 0
)
bSizer11.Add(self.m_bitmap12, 0, wx.ALL, 5) bSizer11.Add(self.m_bitmap12, 0, wx.ALL, 5)
self.m_staticline212 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL) self.m_staticline212 = wx.StaticLine(
self.m_staticline212.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL
)
self.m_staticline212.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
)
self.m_staticline212.SetMaxSize(wx.Size(80, -1)) self.m_staticline212.SetMaxSize(wx.Size(80, -1))
bSizer11.Add(self.m_staticline212, 0, wx.EXPAND | wx.ALL, 5) bSizer11.Add(self.m_staticline212, 0, wx.EXPAND | wx.ALL, 5)
self.m_staticText111 = wx.StaticText(self, wx.ID_ANY, u"当前状态", wx.DefaultPosition, wx.Size(-1, 30), 0) self.m_staticText111 = wx.StaticText(
self, wx.ID_ANY, "当前状态", wx.DefaultPosition, wx.Size(-1, 30), 0
)
self.m_staticText111.Wrap(-1) self.m_staticText111.Wrap(-1)
self.m_staticText111.SetFont(wx.Font(11, 70, 90, 90, False, "宋体")) self.m_staticText111.SetFont(wx.Font(11, 70, 90, 90, False, "宋体"))
self.m_staticText111.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_staticText111.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer11.Add(self.m_staticText111, 0, wx.ALL, 5) bSizer11.Add(self.m_staticText111, 0, wx.ALL, 5)
@ -74,48 +111,80 @@ class MyFrame(wx.Frame):
bSizer2 = wx.BoxSizer(wx.VERTICAL) bSizer2 = wx.BoxSizer(wx.VERTICAL)
self.m_staticText = wx.StaticText(self, wx.ID_ANY, u"安全多方平台服务器", wx.DefaultPosition, wx.Size(-1, 30), 0) self.m_staticText = wx.StaticText(
self, wx.ID_ANY, "安全多方平台服务器", wx.DefaultPosition, wx.Size(-1, 30), 0
)
self.m_staticText.Wrap(-1) self.m_staticText.Wrap(-1)
self.m_staticText.SetFont(wx.Font(16, 70, 90, 92, False, "宋体")) self.m_staticText.SetFont(wx.Font(16, 70, 90, 92, False, "宋体"))
self.m_staticText.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_staticText.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer2.Add(self.m_staticText, 0, wx.ALL, 5) bSizer2.Add(self.m_staticText, 0, wx.ALL, 5)
self.m_staticline1 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(1, 2), wx.LI_HORIZONTAL) self.m_staticline1 = wx.StaticLine(
self.m_staticline1.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self, wx.ID_ANY, wx.DefaultPosition, wx.Size(1, 2), wx.LI_HORIZONTAL
)
self.m_staticline1.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
)
bSizer2.Add(self.m_staticline1, 0, wx.EXPAND | wx.ALL, 5) bSizer2.Add(self.m_staticline1, 0, wx.EXPAND | wx.ALL, 5)
self.m_listCtrl1 = wx.ListCtrl(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(360, 150), wx.LC_REPORT) self.m_listCtrl1 = wx.ListCtrl(
self, wx.ID_ANY, wx.DefaultPosition, wx.Size(360, 150), wx.LC_REPORT
)
self.m_listCtrl1.SetFont(wx.Font(9, 70, 90, 90, False, "宋体")) self.m_listCtrl1.SetFont(wx.Font(9, 70, 90, 90, False, "宋体"))
self.m_listCtrl1.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_listCtrl1.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer2.Add(self.m_listCtrl1, 0, wx.ALL, 5) bSizer2.Add(self.m_listCtrl1, 0, wx.ALL, 5)
self.m_staticline2 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL) self.m_staticline2 = wx.StaticLine(
self.m_staticline2.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL
)
self.m_staticline2.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
)
bSizer2.Add(self.m_staticline2, 0, wx.EXPAND | wx.ALL, 5) bSizer2.Add(self.m_staticline2, 0, wx.EXPAND | wx.ALL, 5)
self.m_listCtrl2 = wx.ListCtrl(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(360, 150), wx.LC_REPORT) self.m_listCtrl2 = wx.ListCtrl(
self, wx.ID_ANY, wx.DefaultPosition, wx.Size(360, 150), wx.LC_REPORT
)
self.m_listCtrl2.SetFont(wx.Font(9, 70, 90, 90, False, "宋体")) self.m_listCtrl2.SetFont(wx.Font(9, 70, 90, 90, False, "宋体"))
self.m_listCtrl2.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_listCtrl2.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer2.Add(self.m_listCtrl2, 0, wx.ALL, 5) bSizer2.Add(self.m_listCtrl2, 0, wx.ALL, 5)
self.m_staticline22 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL) self.m_staticline22 = wx.StaticLine(
self.m_staticline22.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL
)
self.m_staticline22.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
)
bSizer2.Add(self.m_staticline22, 0, wx.EXPAND | wx.ALL, 5) bSizer2.Add(self.m_staticline22, 0, wx.EXPAND | wx.ALL, 5)
self.m_listCtrl3 = wx.ListCtrl(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(360, 150), wx.LC_REPORT) self.m_listCtrl3 = wx.ListCtrl(
self, wx.ID_ANY, wx.DefaultPosition, wx.Size(360, 150), wx.LC_REPORT
)
self.m_listCtrl3.SetFont(wx.Font(9, 70, 90, 90, False, "宋体")) self.m_listCtrl3.SetFont(wx.Font(9, 70, 90, 90, False, "宋体"))
self.m_listCtrl3.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_listCtrl3.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer2.Add(self.m_listCtrl3, 0, wx.ALL, 5) bSizer2.Add(self.m_listCtrl3, 0, wx.ALL, 5)
self.m_staticline221 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL) self.m_staticline221 = wx.StaticLine(
self.m_staticline221.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 2), wx.LI_HORIZONTAL
)
self.m_staticline221.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
)
bSizer2.Add(self.m_staticline221, 0, wx.EXPAND | wx.ALL, 5) bSizer2.Add(self.m_staticline221, 0, wx.EXPAND | wx.ALL, 5)
@ -123,9 +192,13 @@ class MyFrame(wx.Frame):
bSizer102 = wx.BoxSizer(wx.HORIZONTAL) bSizer102 = wx.BoxSizer(wx.HORIZONTAL)
self.m_button31 = wx.Button(self, wx.ID_ANY, u"显示本地公钥", wx.DefaultPosition, wx.Size(300, 30), 0) self.m_button31 = wx.Button(
self, wx.ID_ANY, "显示本地公钥", wx.DefaultPosition, wx.Size(300, 30), 0
)
self.m_button31.SetFont(wx.Font(11, 70, 90, 90, False, wx.EmptyString)) self.m_button31.SetFont(wx.Font(11, 70, 90, 90, False, wx.EmptyString))
self.m_button31.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_button31.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer102.Add(self.m_button31, 0, wx.ALIGN_CENTER | wx.ALL, 5) bSizer102.Add(self.m_button31, 0, wx.ALIGN_CENTER | wx.ALL, 5)
@ -133,9 +206,13 @@ class MyFrame(wx.Frame):
bSizer1012 = wx.BoxSizer(wx.HORIZONTAL) bSizer1012 = wx.BoxSizer(wx.HORIZONTAL)
self.m_button41 = wx.Button(self, wx.ID_ANY, u"显示本地私钥", wx.DefaultPosition, wx.Size(300, 30), 0) self.m_button41 = wx.Button(
self, wx.ID_ANY, "显示本地私钥", wx.DefaultPosition, wx.Size(300, 30), 0
)
self.m_button41.SetFont(wx.Font(11, 70, 90, 90, False, wx.EmptyString)) self.m_button41.SetFont(wx.Font(11, 70, 90, 90, False, wx.EmptyString))
self.m_button41.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_button41.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer1012.Add(self.m_button41, 0, wx.ALIGN_CENTER | wx.ALL, 5) bSizer1012.Add(self.m_button41, 0, wx.ALIGN_CENTER | wx.ALL, 5)
@ -143,9 +220,13 @@ class MyFrame(wx.Frame):
bSizer10111 = wx.BoxSizer(wx.HORIZONTAL) bSizer10111 = wx.BoxSizer(wx.HORIZONTAL)
self.m_button51 = wx.Button(self, wx.ID_ANY, u"打印本地证书", wx.DefaultPosition, wx.Size(300, 30), 0) self.m_button51 = wx.Button(
self, wx.ID_ANY, "打印本地证书", wx.DefaultPosition, wx.Size(300, 30), 0
)
self.m_button51.SetFont(wx.Font(11, 70, 90, 90, False, wx.EmptyString)) self.m_button51.SetFont(wx.Font(11, 70, 90, 90, False, wx.EmptyString))
self.m_button51.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) self.m_button51.SetForegroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
)
bSizer10111.Add(self.m_button51, 0, wx.ALIGN_CENTER | wx.ALL, 5) bSizer10111.Add(self.m_button51, 0, wx.ALIGN_CENTER | wx.ALL, 5)

View File

@ -1,7 +1,7 @@
import socket import socket
import time import time
import pickle import pickle
import wx import wx # pylint: disable=e0401 # type: ignore
import CoreAlgorithm import CoreAlgorithm
import threading import threading
@ -25,8 +25,11 @@ def generate_key_pair_data():
# 从公钥证书中提取公钥信息 # 从公钥证书中提取公钥信息
def get_public_key_data(message): def get_public_key_data(message):
message = eval(message.replace("\n", "")) message = eval(message.replace("\n", ""))
public_key = message["public_key"].replace("-----BEGIN PUBLIC KEY-----", "").replace( public_key = (
"-----END PUBLIC KEY-----", "") # 分割得到公钥 message["public_key"]
.replace("-----BEGIN PUBLIC KEY-----", "")
.replace("-----END PUBLIC KEY-----", "")
) # 分割得到公钥
public_key_bytes = bytes.fromhex(public_key) public_key_bytes = bytes.fromhex(public_key)
public_key_data = pickle.loads(public_key_bytes) public_key_data = pickle.loads(public_key_bytes)
return public_key_data return public_key_data
@ -34,12 +37,13 @@ def get_public_key_data(message):
# 用公钥为本地生成数字证书 # 用公钥为本地生成数字证书
def get_certificate(temp_public_key, cert_name): def get_certificate(temp_public_key, cert_name):
public_key_str = '\n'.join(temp_public_key[i:i + 60] for i in range(0, len(temp_public_key), 60)) public_key_str = "\n".join(
pack_public_key = "-----BEGIN PUBLIC KEY-----\n" + public_key_str + "\n-----END PUBLIC KEY-----\n" temp_public_key[i : i + 60] for i in range(0, len(temp_public_key), 60)
cert = { )
'public_key': pack_public_key, pack_public_key = (
'name': cert_name "-----BEGIN PUBLIC KEY-----\n" + public_key_str + "\n-----END PUBLIC KEY-----\n"
} )
cert = {"public_key": pack_public_key, "name": cert_name}
return cert return cert
@ -49,7 +53,7 @@ def str_to_encrypt(message, public_data):
if message.isdigit(): if message.isdigit():
int_message = int(message) int_message = int(message)
else: else:
int_message = int.from_bytes(message.encode(), 'big') int_message = int.from_bytes(message.encode(), "big")
enc_message = public_data.encrypt(int_message) enc_message = public_data.encrypt(int_message)
print("int_message", int_message) print("int_message", int_message)
return enc_message return enc_message
@ -77,7 +81,7 @@ class MyServer(server_demo.MyFrame):
# 初始化socket # 初始化socket
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口 # 绑定IP地址和端口
self.server.bind(('localhost', 1111)) self.server.bind(("localhost", 1111))
# 设置最大监听数 # 设置最大监听数
self.server.listen(5) self.server.listen(5)
# 设置一个字典,用来保存每一个客户端的连接和身份信息 # 设置一个字典,用来保存每一个客户端的连接和身份信息
@ -127,7 +131,9 @@ class MyServer(server_demo.MyFrame):
time.sleep(sleep_time) time.sleep(sleep_time)
# 创建线程,负责接收客户端信息并转发给其他客户端 # 创建线程,负责接收客户端信息并转发给其他客户端
threading.Thread(target=self.recv_from_client, args=(client_socket,)).start() threading.Thread(
target=self.recv_from_client, args=(client_socket,)
).start()
# 产生公私钥字符串 # 产生公私钥字符串
def generate_key_pair(self): def generate_key_pair(self):
@ -142,8 +148,10 @@ class MyServer(server_demo.MyFrame):
# 接收客户端消息并转发 # 接收客户端消息并转发
def recv_from_client(self, client_socket): # client_socket指的是连接到的端口socket def recv_from_client(self, client_socket): # client_socket指的是连接到的端口socket
while True: while True:
message = client_socket.recv(self.maxSize).decode('utf-8') message = client_socket.recv(self.maxSize).decode("utf-8")
message_p = "接收到来自{0}的message:\n{1}".format(self.socket_mapping[client_socket][0], message) message_p = "接收到来自{0}的message:\n{1}".format(
self.socket_mapping[client_socket][0], message
)
print(message_p) print(message_p)
self.m_listCtrl1.Append([message_p]) # 准备文件传输 self.m_listCtrl1.Append([message_p]) # 准备文件传输
if message.startswith("01001001"): if message.startswith("01001001"):
@ -152,7 +160,9 @@ class MyServer(server_demo.MyFrame):
self.m_listCtrl3.Append([message_p]) self.m_listCtrl3.Append([message_p])
time.sleep(sleep_time) time.sleep(sleep_time)
# 去掉审批回执的头部 # 去掉审批回执的头部
message = message.split("01001001", 1)[1] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。 message = message.split("01001001", 1)[
1
] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。
# 认证发送者的合法性 # 认证发送者的合法性
sender = message.split("||")[0] sender = message.split("||")[0]
context = message.split("||")[1] context = message.split("||")[1]
@ -171,7 +181,9 @@ class MyServer(server_demo.MyFrame):
# 认证发送者的合法性 # 认证发送者的合法性
if len(self.socket_mapping[client_socket]) > 1: # 如果发送者的公钥信息已被收集 if len(self.socket_mapping[client_socket]) > 1: # 如果发送者的公钥信息已被收集
# 识别明文中一起发送的发送目标 明文应是发送者||发送内容(||时间戳等),对象用socket表示吧... # 识别明文中一起发送的发送目标 明文应是发送者||发送内容(||时间戳等),对象用socket表示吧...
message = message.split("01001010", 1)[1] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。 message = message.split("01001010", 1)[
1
] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。
# 用发送目标之前给的公钥加密明文,得到密文。 # 用发送目标之前给的公钥加密明文,得到密文。
# 去掉sql密文的头部 # 去掉sql密文的头部
# 使用平台私钥解密消息,获得sql明文 # 使用平台私钥解密消息,获得sql明文
@ -181,9 +193,13 @@ class MyServer(server_demo.MyFrame):
time.sleep(sleep_time) time.sleep(sleep_time)
int_message = int(message) int_message = int(message)
# Ciphertext转EncryptedNumber # Ciphertext转EncryptedNumber
Encrpt_message = CoreAlgorithm.EncryptedNumber(self.public_key_data, int_message, exponent=0) Encrpt_message = CoreAlgorithm.EncryptedNumber(
self.public_key_data, int_message, exponent=0
)
dec_int_message = self.private_key_data.decrypt(Encrpt_message) dec_int_message = self.private_key_data.decrypt(Encrpt_message)
dec_message = dec_int_message.to_bytes((dec_int_message.bit_length() + 7) // 8, 'big').decode() dec_message = dec_int_message.to_bytes(
(dec_int_message.bit_length() + 7) // 8, "big"
).decode()
message_p = "解密后的消息为:" + dec_message message_p = "解密后的消息为:" + dec_message
print(message_p) print(message_p)
self.m_listCtrl3.Append([message_p]) self.m_listCtrl3.Append([message_p])
@ -231,7 +247,9 @@ class MyServer(server_demo.MyFrame):
self.m_listCtrl3.Append([message_p]) self.m_listCtrl3.Append([message_p])
time.sleep(sleep_time) time.sleep(sleep_time)
# 去掉元数据头部 # 去掉元数据头部
message = message.split("01001100", 1)[1] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。 message = message.split("01001100", 1)[
1
] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。
# 把元数据存入本地数据库的临时表里格式provider + encode_data # 把元数据存入本地数据库的临时表里格式provider + encode_data
# print("message:", message) # print("message:", message)
int_message = int(message) int_message = int(message)
@ -239,8 +257,11 @@ class MyServer(server_demo.MyFrame):
print(message_p) print(message_p)
self.m_listCtrl1.Append([message_p]) self.m_listCtrl1.Append([message_p])
# 根据证书找公钥信息 # 根据证书找公钥信息
search_public_key = self.search_cert["public_key"].split("-----END PUBLIC KEY-----")[0].split( search_public_key = (
"-----BEGIN PUBLIC KEY-----")[1] self.search_cert["public_key"]
.split("-----END PUBLIC KEY-----")[0]
.split("-----BEGIN PUBLIC KEY-----")[1]
)
search_public_key = search_public_key.replace("\n", "") search_public_key = search_public_key.replace("\n", "")
print("提取到的search_public_key:") print("提取到的search_public_key:")
print(search_public_key) print(search_public_key)
@ -252,7 +273,9 @@ class MyServer(server_demo.MyFrame):
print("对应的search_public_key_data:") print("对应的search_public_key_data:")
print(search_public_key_data) print(search_public_key_data)
# int密 -- EncryptedNumber密 # int密 -- EncryptedNumber密
Encrpt_message = CoreAlgorithm.EncryptedNumber(search_public_key_data, int_message, exponent=0) Encrpt_message = CoreAlgorithm.EncryptedNumber(
search_public_key_data, int_message, exponent=0
)
self.datas.append(Encrpt_message) self.datas.append(Encrpt_message)
# Ciphertext转EncryptedNumber # Ciphertext转EncryptedNumber
# print("int_message:", int_message) # print("int_message:", int_message)
@ -283,7 +306,9 @@ class MyServer(server_demo.MyFrame):
print(message) print(message)
print(self.socket_mapping) print(self.socket_mapping)
print(get_public_key_data(message)) print(get_public_key_data(message))
self.socket_mapping[client_socket].append(get_public_key_data(message)) # 绑定端口与公钥信息的关系 self.socket_mapping[client_socket].append(
get_public_key_data(message)
) # 绑定端口与公钥信息的关系
print(self.socket_mapping) print(self.socket_mapping)
cert = eval(message) cert = eval(message)
print(cert, type(cert)) # 字典型 print(cert, type(cert)) # 字典型
@ -367,8 +392,14 @@ class MyServer(server_demo.MyFrame):
print(message_p) print(message_p)
self.m_listCtrl3.Append([message_p]) self.m_listCtrl3.Append([message_p])
public_key_str = '\n'.join(self.public_key[i:i + 60] for i in range(0, len(self.public_key), 60)) public_key_str = "\n".join(
pack_public_key = "-----BEGIN PUBLIC KEY-----\n" + public_key_str + "\n-----END PUBLIC KEY-----\n" self.public_key[i : i + 60] for i in range(0, len(self.public_key), 60)
)
pack_public_key = (
"-----BEGIN PUBLIC KEY-----\n"
+ public_key_str
+ "\n-----END PUBLIC KEY-----\n"
)
message_p = pack_public_key message_p = pack_public_key
print(message_p) print(message_p)
message = message_p.split("\n") # 设置打印格式,因为显示窗打印不了\n message = message_p.split("\n") # 设置打印格式,因为显示窗打印不了\n
@ -386,8 +417,14 @@ class MyServer(server_demo.MyFrame):
print(message_p) print(message_p)
self.m_listCtrl3.Append([message_p]) self.m_listCtrl3.Append([message_p])
private_key_str = '\n'.join(self.private_key[i:i + 60] for i in range(0, len(self.public_key), 60)) private_key_str = "\n".join(
pack_private_key = "-----BEGIN PRIVATE KEY-----\n" + private_key_str + "\n-----END PRIVATE KEY-----\n" self.private_key[i : i + 60] for i in range(0, len(self.public_key), 60)
)
pack_private_key = (
"-----BEGIN PRIVATE KEY-----\n"
+ private_key_str
+ "\n-----END PRIVATE KEY-----\n"
)
message_p = "打印私钥如下:" message_p = "打印私钥如下:"
print(message_p) print(message_p)
@ -423,17 +460,32 @@ class MyServer(server_demo.MyFrame):
def pack_sqls(self): def pack_sqls(self):
for key, value in self.socket_mapping.items(): for key, value in self.socket_mapping.items():
for i in range(len(self.divide_providers)): for i in range(len(self.divide_providers)):
if self.divide_providers[i] in value[2]: # eg: value[2] == "<数据提供方>风舱医院" if (
self.divide_providers[i] in value[2]
): # eg: value[2] == "<数据提供方>风舱医院"
for j in range(len(self.divide_sqls)): for j in range(len(self.divide_sqls)):
if self.divide_providers[i] in self.divide_sqls[j]: # 如果发送目标和信息匹配) if (
sql = str(self.source) + "||" + str(key.getsockname()) + "||" + self.divide_sqls[i] self.divide_providers[i] in self.divide_sqls[j]
): # 如果发送目标和信息匹配)
sql = (
str(self.source)
+ "||"
+ str(key.getsockname())
+ "||"
+ self.divide_sqls[i]
)
print(sql) print(sql)
int_enc_sql = str_to_encrypt(sql, value[1]).ciphertext() # 用接收者的公钥加密消息 int_enc_sql = str_to_encrypt(
sql, value[1]
).ciphertext() # 用接收者的公钥加密消息
message_p = "01001010" + str(int_enc_sql) message_p = "01001010" + str(int_enc_sql)
key.send(message_p.encode()) key.send(message_p.encode())
self.m_listCtrl2.Append([message_p]) self.m_listCtrl2.Append([message_p])
message_p = "已将消息{0}发送给{1},其地址为{2}".format( message_p = "已将消息{0}发送给{1},其地址为{2}".format(
self.divide_sqls[j], self.divide_providers[i], key.getsockname()) self.divide_sqls[j],
self.divide_providers[i],
key.getsockname(),
)
print(message_p) print(message_p)
self.m_listCtrl3.Append([message_p]) self.m_listCtrl3.Append([message_p])
@ -446,7 +498,7 @@ class MyServer(server_demo.MyFrame):
self.m_listCtrl3.Append([message_p]) self.m_listCtrl3.Append([message_p])
time.sleep(sleep_time) time.sleep(sleep_time)
# #################安全多方计算分析过程############## # #################安全多方计算分析过程##############
if 'select count(*) from xx阳光社区诊所, xx大学附属医院' in self.sql: if "select count(*) from xx阳光社区诊所, xx大学附属医院" in self.sql:
print(self.datas) print(self.datas)
for x in self.datas: for x in self.datas:
self.result = self.result + x self.result = self.result + x

View File

@ -17,8 +17,9 @@ import tkinter as tk
from tkinter import * from tkinter import *
from tkinter import messagebox, scrolledtext from tkinter import messagebox, scrolledtext
from PIL import ImageTk from PIL import ImageTk
# 美化 # 美化
from ttkbootstrap import Style from ttkbootstrap import Style # pylint: disable=e0401 # type: ignore
from tkinter import ttk from tkinter import ttk
sleep_time = 1 sleep_time = 1
@ -32,12 +33,13 @@ def generate_key_pair_data():
# 用公钥为本地生成数字证书 # 用公钥为本地生成数字证书
def get_certificate(temp_public_key, cert_name): def get_certificate(temp_public_key, cert_name):
public_key_str = '\n'.join(temp_public_key[i:i + 60] for i in range(0, len(temp_public_key), 60)) public_key_str = "\n".join(
pack_public_key = "-----BEGIN PUBLIC KEY-----\n" + public_key_str + "\n-----END PUBLIC KEY-----" temp_public_key[i : i + 60] for i in range(0, len(temp_public_key), 60)
cert = { )
'public_key': pack_public_key, pack_public_key = (
'name': "<数据提供方>" + cert_name "-----BEGIN PUBLIC KEY-----\n" + public_key_str + "\n-----END PUBLIC KEY-----"
} )
cert = {"public_key": pack_public_key, "name": "<数据提供方>" + cert_name}
return cert return cert
@ -56,7 +58,7 @@ def str_to_encrypt(message, public_data):
if message.isdigit(): if message.isdigit():
int_message = int(message) int_message = int(message)
else: else:
int_message = int.from_bytes(message.encode(), 'big') int_message = int.from_bytes(message.encode(), "big")
enc_message = public_data.encrypt(int_message) enc_message = public_data.encrypt(int_message)
print("int_message", int_message) print("int_message", int_message)
return enc_message return enc_message
@ -82,7 +84,10 @@ class MyClient:
self.give_name() self.give_name()
# 生成私钥和公钥信息 # 生成私钥和公钥信息
self.private_key_data, self.public_key_data = generate_key_pair_data() # PaillierPublicKey 类型 (
self.private_key_data,
self.public_key_data,
) = generate_key_pair_data() # PaillierPublicKey 类型
# 生成私钥和公钥字符串 # 生成私钥和公钥字符串
self.private_key, self.public_key = self.generate_key_pair() self.private_key, self.public_key = self.generate_key_pair()
# 初始化数字证书 # 初始化数字证书
@ -105,16 +110,18 @@ class MyClient:
# 为本端取名 # 为本端取名
def give_name(self): def give_name(self):
self.window = tk.Toplevel() self.window = tk.Toplevel()
self.window.title('命名窗口') self.window.title("命名窗口")
self.window.geometry('300x320') self.window.geometry("300x320")
# 初始化信息输入框 # 初始化信息输入框
self.name_text = tk.StringVar() self.name_text = tk.StringVar()
tk.Label(self.window, bg='green', text='请为本端取名:').place(x=50, y=100) tk.Label(self.window, bg="green", text="请为本端取名:").place(x=50, y=100)
input_message = tk.Entry(self.window, textvariable=self.name_text) input_message = tk.Entry(self.window, textvariable=self.name_text)
input_message.pack() input_message.pack()
input_message.place(x=80, y=150) input_message.place(x=80, y=150)
# 确认按钮及位置 # 确认按钮及位置
bt_confirm = tk.Button(self.window, bg='green', text='确认', width=10, command=self.get_name) bt_confirm = tk.Button(
self.window, bg="green", text="确认", width=10, command=self.get_name
)
bt_confirm.pack() bt_confirm.pack()
bt_confirm.place(x=125, y=220) bt_confirm.place(x=125, y=220)
@ -159,8 +166,14 @@ class MyClient:
print("本地公钥信息为:") print("本地公钥信息为:")
print(self.public_key_data) print(self.public_key_data)
print("打印公钥如下:", end="") print("打印公钥如下:", end="")
public_key_str = '\n'.join(self.public_key[i:i + 60] for i in range(0, len(self.public_key), 60)) public_key_str = "\n".join(
pack_public_key = "\n-----BEGIN PUBLIC KEY-----\n" + public_key_str + "\n-----END PUBLIC KEY-----\n" self.public_key[i : i + 60] for i in range(0, len(self.public_key), 60)
)
pack_public_key = (
"\n-----BEGIN PUBLIC KEY-----\n"
+ public_key_str
+ "\n-----END PUBLIC KEY-----\n"
)
print(pack_public_key) print(pack_public_key)
messagebox.showinfo("本地公钥", pack_public_key) # GUI界面显示 messagebox.showinfo("本地公钥", pack_public_key) # GUI界面显示
@ -168,8 +181,14 @@ class MyClient:
def print_private_key(self): def print_private_key(self):
print("本地私钥信息为:") print("本地私钥信息为:")
print(self.private_key_data) print(self.private_key_data)
private_key_str = '\n'.join(self.private_key[i:i + 60] for i in range(0, len(self.public_key), 60)) private_key_str = "\n".join(
pack_private_key = "-----BEGIN PRIVATE KEY-----\n" + private_key_str + "\n-----END PRIVATE KEY-----\n" self.private_key[i : i + 60] for i in range(0, len(self.public_key), 60)
)
pack_private_key = (
"-----BEGIN PRIVATE KEY-----\n"
+ private_key_str
+ "\n-----END PRIVATE KEY-----\n"
)
print("打印私钥如下:", end="") print("打印私钥如下:", end="")
print(pack_private_key) print(pack_private_key)
messagebox.showinfo("本地私钥", pack_private_key) # GUI界面显示 messagebox.showinfo("本地私钥", pack_private_key) # GUI界面显示
@ -208,8 +227,11 @@ class MyClient:
print(key, ":\n", value) print(key, ":\n", value)
message += key + ":\n" + value message += key + ":\n" + value
messagebox.showinfo("平台的公钥证书", message) messagebox.showinfo("平台的公钥证书", message)
server_public_key = cert["public_key"].split("-----END PUBLIC KEY-----")[0].split( server_public_key = (
"-----BEGIN PUBLIC KEY-----")[1] cert["public_key"]
.split("-----END PUBLIC KEY-----")[0]
.split("-----BEGIN PUBLIC KEY-----")[1]
)
server_public_key = server_public_key.replace("\n", "") server_public_key = server_public_key.replace("\n", "")
print("提取到的server_public_key:") print("提取到的server_public_key:")
print(server_public_key) print(server_public_key)
@ -238,8 +260,11 @@ class MyClient:
print(key, ":\n", value) print(key, ":\n", value)
message += key + ":\n" + value + "\n" message += key + ":\n" + value + "\n"
# messagebox.showinfo("数据查询方的公钥证书", message) # messagebox.showinfo("数据查询方的公钥证书", message)
search_public_key = cert["public_key"].split("-----END PUBLIC KEY-----")[0].split( search_public_key = (
"-----BEGIN PUBLIC KEY-----")[1] cert["public_key"]
.split("-----END PUBLIC KEY-----")[0]
.split("-----BEGIN PUBLIC KEY-----")[1]
)
search_public_key = search_public_key.replace("\n", "") search_public_key = search_public_key.replace("\n", "")
print("提取到的search_public_key:") print("提取到的search_public_key:")
print(search_public_key) print(search_public_key)
@ -250,14 +275,20 @@ class MyClient:
# messagebox.showinfo("数据查询方的公钥信息", search_public_key_data) # messagebox.showinfo("数据查询方的公钥信息", search_public_key_data)
elif message.startswith("01001010"): elif message.startswith("01001010"):
message = message.split("01001010", 1)[1] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。 message = message.split("01001010", 1)[
1
] # [0]是空字符串,已测试。只切一次是防止密文出现和头部一样的信息被误切。
# 使用私钥解密消息,获得sql明文 # 使用私钥解密消息,获得sql明文
print("接收到的sql密文:", message) print("接收到的sql密文:", message)
int_message = int(message) int_message = int(message)
# Ciphertext转EncryptedNumber # Ciphertext转EncryptedNumber
Encrpt_message = CoreAlgorithm.EncryptedNumber(self.public_key_data, int_message, exponent=0) Encrpt_message = CoreAlgorithm.EncryptedNumber(
self.public_key_data, int_message, exponent=0
)
dec_int_message = self.private_key_data.decrypt(Encrpt_message) dec_int_message = self.private_key_data.decrypt(Encrpt_message)
dec_message = dec_int_message.to_bytes((dec_int_message.bit_length() + 7) // 8, 'big').decode() dec_message = dec_int_message.to_bytes(
(dec_int_message.bit_length() + 7) // 8, "big"
).decode()
print("解密后的消息为:", dec_message) print("解密后的消息为:", dec_message)
self.sql = dec_message.split("||")[2] self.sql = dec_message.split("||")[2]
print("收到已授权方的sql:", self.sql) print("收到已授权方的sql:", self.sql)
@ -267,19 +298,29 @@ class MyClient:
# 接受调用数据的请求 # 接受调用数据的请求
def send_accept_reply(self): def send_accept_reply(self):
self.client.send(("01001001" + str(self.client.getsockname()) + "||" + self.name + "同意了你的数据申请。").encode()) self.client.send(
(
"01001001"
+ str(self.client.getsockname())
+ "||"
+ self.name
+ "同意了你的数据申请。"
).encode()
)
self.window.destroy() self.window.destroy()
self.window = tk.Toplevel() self.window = tk.Toplevel()
self.window.title('命名窗口') self.window.title("命名窗口")
self.window.geometry('300x320') self.window.geometry("300x320")
# 信息输入框 # 信息输入框
self.data_text = tk.StringVar() self.data_text = tk.StringVar()
tk.Label(self.window, bg='green', text='请输入要调用的信息:').place(x=50, y=100) tk.Label(self.window, bg="green", text="请输入要调用的信息:").place(x=50, y=100)
input_message = tk.Entry(self.window, textvariable=self.data_text) input_message = tk.Entry(self.window, textvariable=self.data_text)
input_message.pack() input_message.pack()
input_message.place(x=80, y=150) input_message.place(x=80, y=150)
# 确认按钮及位置 # 确认按钮及位置
bt_confirm = tk.Button(self.window, bg='green', text='确认', width=10, command=self.send_data) bt_confirm = tk.Button(
self.window, bg="green", text="确认", width=10, command=self.send_data
)
bt_confirm.pack() bt_confirm.pack()
bt_confirm.place(x=125, y=220) bt_confirm.place(x=125, y=220)
@ -300,7 +341,11 @@ class MyClient:
# 拒绝调用数据的请求 # 拒绝调用数据的请求
def send_decline_reply(self): def send_decline_reply(self):
self.client.send(("01001001" + str(self.client.getsockname()) + "||" + "想得美哦!不给(*^▽^*)").encode()) self.client.send(
(
"01001001" + str(self.client.getsockname()) + "||" + "想得美哦!不给(*^▽^*)"
).encode()
)
messagebox.showinfo("提示", "已拒绝!") messagebox.showinfo("提示", "已拒绝!")
self.window.destroy() self.window.destroy()
@ -313,23 +358,32 @@ class MyClient:
if self.sql != "": if self.sql != "":
self.window = tk.Toplevel() self.window = tk.Toplevel()
self.window.title("平台发来的消息") self.window.title("平台发来的消息")
self.window.geometry('550x320') # 设定窗口大小 self.window.geometry("550x320") # 设定窗口大小
self.recent_message = "收到已授权方的sql:" + self.sql self.recent_message = "收到已授权方的sql:" + self.sql
tk.Label(self.window, bg='green', text=self.recent_message).place(x=50, y=100) tk.Label(self.window, bg="green", text=self.recent_message).place(
x=50, y=100
)
# 创建接受按钮 # 创建接受按钮
accept_button = tk.Button(self.window, text="接受", width=15, command=self.send_accept_reply) accept_button = tk.Button(
self.window, text="接受", width=15, command=self.send_accept_reply
)
accept_button.place(x=90, y=220) accept_button.place(x=90, y=220)
# 创建拒绝按钮 # 创建拒绝按钮
decline_button = tk.Button(self.window, text="拒绝", width=15, command=self.send_decline_reply) decline_button = tk.Button(
self.window, text="拒绝", width=15, command=self.send_decline_reply
)
decline_button.place(x=225, y=220) decline_button.place(x=225, y=220)
# 创建稍后处理按钮 # 创建稍后处理按钮
decline_button = tk.Button(self.window, text="稍后处理", width=15, command=self.wait_reply) decline_button = tk.Button(
self.window, text="稍后处理", width=15, command=self.wait_reply
)
decline_button.place(x=360, y=220) decline_button.place(x=360, y=220)
else: else:
messagebox.showinfo("提示", "暂无待处理的信息。") messagebox.showinfo("提示", "暂无待处理的信息。")
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# 调用本地信息库 # 调用本地信息库
def search_data(self): def search_data(self):
@ -349,29 +403,59 @@ class MyClient:
roll.insert(tk.END, long_text) roll.insert(tk.END, long_text)
roll.pack() roll.pack()
# --------------------------主界面的按键功能绑定-------------------------------- # --------------------------主界面的按键功能绑定--------------------------------
# 界面按键 # 界面按键
def create_widgets(self): def create_widgets(self):
# 创建按钮和标签等部件并使用ttk和Style进行美化 # 创建按钮和标签等部件并使用ttk和Style进行美化
style = Style(theme='darkly') # 指定样式主题 style = Style(theme="darkly") # 指定样式主题
self.root = style.master self.root = style.master
button1 = ttk.Button(self.root, text="查看我的公钥", bootstyle="info-outline", button1 = ttk.Button(
command=self.print_public_key, width=30) self.root,
text="查看我的公钥",
bootstyle="info-outline",
command=self.print_public_key,
width=30,
)
button1.place(x=104, y=310) button1.place(x=104, y=310)
button2 = ttk.Button(self.root, text="查看我的私钥", bootstyle="info-outline", button2 = ttk.Button(
command=self.print_private_key, width=30) self.root,
text="查看我的私钥",
bootstyle="info-outline",
command=self.print_private_key,
width=30,
)
button2.place(x=104, y=348) button2.place(x=104, y=348)
button3 = ttk.Button(self.root, text="生成我的证书", bootstyle="info-outline", button3 = ttk.Button(
command=self.print_certificate, width=30) self.root,
text="生成我的证书",
bootstyle="info-outline",
command=self.print_certificate,
width=30,
)
button3.place(x=104, y=383) button3.place(x=104, y=383)
button4 = ttk.Button(self.root, text="获取平台认证", bootstyle="info-outline", button4 = ttk.Button(
command=self.safe_connect, width=30) self.root,
text="获取平台认证",
bootstyle="info-outline",
command=self.safe_connect,
width=30,
)
button4.place(x=104, y=418) button4.place(x=104, y=418)
button5 = ttk.Button(self.root, text="处理请求信息", bootstyle="info-outline", button5 = ttk.Button(
command=self.design_window, width=30) self.root,
text="处理请求信息",
bootstyle="info-outline",
command=self.design_window,
width=30,
)
button5.place(x=104, y=453) button5.place(x=104, y=453)
button6 = ttk.Button(self.root, text="查看医疗记录", bootstyle="info-outline", button6 = ttk.Button(
command=self.search_data, width=30) self.root,
text="查看医疗记录",
bootstyle="info-outline",
command=self.search_data,
width=30,
)
button6.place(x=104, y=488) button6.place(x=104, y=488)
# GUI界面 # GUI界面