|
|
@ -26,7 +26,7 @@ from PyQt5.QtWidgets import QMessageBox,QFileDialog
|
|
|
|
#import sm2random
|
|
|
|
#import sm2random
|
|
|
|
from OpenSSL import crypto
|
|
|
|
from OpenSSL import crypto
|
|
|
|
class Ui_MainWindow(object):
|
|
|
|
class Ui_MainWindow(object):
|
|
|
|
def setupUi(self, MainWindow,client):
|
|
|
|
def setupUi(self, MainWindow,receiver):
|
|
|
|
MainWindow.setObjectName("MainWindow")
|
|
|
|
MainWindow.setObjectName("MainWindow")
|
|
|
|
MainWindow.resize(800, 602)
|
|
|
|
MainWindow.resize(800, 602)
|
|
|
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
|
|
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
|
|
@ -69,6 +69,7 @@ class Ui_MainWindow(object):
|
|
|
|
self.mode = ""
|
|
|
|
self.mode = ""
|
|
|
|
self.algorithm = ""
|
|
|
|
self.algorithm = ""
|
|
|
|
self.enc_key = ""
|
|
|
|
self.enc_key = ""
|
|
|
|
|
|
|
|
self.receiver = receiver
|
|
|
|
|
|
|
|
|
|
|
|
#打开文件选择对话框
|
|
|
|
#打开文件选择对话框
|
|
|
|
QMessageBox.information(MainWindow, "提示", "请选择你的私钥文件")
|
|
|
|
QMessageBox.information(MainWindow, "提示", "请选择你的私钥文件")
|
|
|
@ -104,11 +105,12 @@ class Ui_MainWindow(object):
|
|
|
|
#接收信封并解封保存,加密后的对称密钥,密文,签名
|
|
|
|
#接收信封并解封保存,加密后的对称密钥,密文,签名
|
|
|
|
data = b""
|
|
|
|
data = b""
|
|
|
|
while True:
|
|
|
|
while True:
|
|
|
|
envelope_dict = self.client.recv(1024)
|
|
|
|
sender_socket = self.receiver.accept()
|
|
|
|
|
|
|
|
envelope_dict = sender_socket.recv(1024)
|
|
|
|
if not envelope_dict:
|
|
|
|
if not envelope_dict:
|
|
|
|
break
|
|
|
|
break
|
|
|
|
data += envelope_dict
|
|
|
|
data += envelope_dict
|
|
|
|
# print(data.decode())
|
|
|
|
print(data.decode())
|
|
|
|
envelope_dict = json.loads(data.decode('utf-8'))
|
|
|
|
envelope_dict = json.loads(data.decode('utf-8'))
|
|
|
|
self.signature= envelope_dict['signature']
|
|
|
|
self.signature= envelope_dict['signature']
|
|
|
|
self.encrypted_text = envelope_dict['encrypted_text']
|
|
|
|
self.encrypted_text = envelope_dict['encrypted_text']
|
|
|
@ -120,25 +122,6 @@ class Ui_MainWindow(object):
|
|
|
|
self.decrypt_key()
|
|
|
|
self.decrypt_key()
|
|
|
|
self.decrypt()
|
|
|
|
self.decrypt()
|
|
|
|
self.client.close()
|
|
|
|
self.client.close()
|
|
|
|
def receive(self):
|
|
|
|
|
|
|
|
#接收信封并解封保存,加密后的对称密钥,密文,签名
|
|
|
|
|
|
|
|
data = b""
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
|
|
|
envelope_dict = self.client.recv(1024)
|
|
|
|
|
|
|
|
if not envelope_dict:
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
data += envelope_dict
|
|
|
|
|
|
|
|
# print(data.decode())
|
|
|
|
|
|
|
|
envelope_dict = json.loads(data.decode('utf-8'))
|
|
|
|
|
|
|
|
self.signature= envelope_dict['signature']
|
|
|
|
|
|
|
|
self.encrypted_text = envelope_dict['encrypted_text']
|
|
|
|
|
|
|
|
self.enc_key = envelope_dict['enc_key']
|
|
|
|
|
|
|
|
self.mode= envelope_dict['mode']
|
|
|
|
|
|
|
|
self.algorithm= envelope_dict['algorithm']
|
|
|
|
|
|
|
|
if self.mode=="CBC":
|
|
|
|
|
|
|
|
self.iv= envelope_dict['iv']
|
|
|
|
|
|
|
|
self.decrypt_key()
|
|
|
|
|
|
|
|
self.decrypt()
|
|
|
|
|
|
|
|
def decrypt_key(self):
|
|
|
|
def decrypt_key(self):
|
|
|
|
#使用rsa私钥解密对称密钥self.enc_key,赋给self.key
|
|
|
|
#使用rsa私钥解密对称密钥self.enc_key,赋给self.key
|
|
|
|
cipher_rsa = PKCS1_OAEP.new(self.private_key)
|
|
|
|
cipher_rsa = PKCS1_OAEP.new(self.private_key)
|
|
|
@ -218,19 +201,10 @@ if __name__ == "__main__":
|
|
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
|
|
window = QtWidgets.QMainWindow()
|
|
|
|
window = QtWidgets.QMainWindow()
|
|
|
|
ui = Ui_MainWindow()
|
|
|
|
ui = Ui_MainWindow()
|
|
|
|
client= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
|
|
|
#接收方建立连接 等待发送方连接
|
|
|
|
ui.setupUi(window,client)
|
|
|
|
receiver_conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
|
|
|
|
receiver_conn.bind(('localhost', 8888))
|
|
|
|
|
|
|
|
receiver_conn.listen(5)
|
|
|
|
|
|
|
|
ui.setupUi(window,receiver_conn)
|
|
|
|
window.show()
|
|
|
|
window.show()
|
|
|
|
#发起连接
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
ui.client.settimeout(5)
|
|
|
|
|
|
|
|
ui.client.connect(('127.0.0.1', 5555))
|
|
|
|
|
|
|
|
except socket.timeout:
|
|
|
|
|
|
|
|
ui.textBrowser.append("[!] Connection timed out, retrying...")
|
|
|
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
|
|
|
ui.textBrowser.append(f"[!] Failed to connect to server: {e}")
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
finally:
|
|
|
|
|
|
|
|
ui.client.close()
|
|
|
|
|
|
|
|
sys.exit(app.exec_())
|
|
|
|
sys.exit(app.exec_())
|