parent
1629b7e356
commit
6a02147a90
@ -0,0 +1,190 @@
|
||||
import sys
|
||||
from PyQt5.QtWidgets import QMainWindow,QApplication,QFileDialog
|
||||
import os
|
||||
import socket
|
||||
from Ui_untitled import Ui_MainWindow
|
||||
from A_private_public import *
|
||||
from digital_signature import *
|
||||
from encrypt_message import *
|
||||
from encrypt_decrypt_key import *
|
||||
from B_private_public import *
|
||||
from decrypt_ciphertext import *
|
||||
from verify_digital_signature import *
|
||||
from tcp_client import *
|
||||
from tcp_server import *
|
||||
|
||||
class MyMainWindow(QMainWindow,Ui_MainWindow):
|
||||
def __init__(self,parent =None):
|
||||
super(MyMainWindow,self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.send_file_path = None #初始化传输文件路径
|
||||
self.host = None#初始化ip和端口
|
||||
self.port = None
|
||||
self.host2 = None#初始化ip和端口
|
||||
self.port2 = None
|
||||
|
||||
self.textEdit_2.setFontPointSize(20)
|
||||
self.textEdit_3.setFontPointSize(20)
|
||||
|
||||
self.pushButton_9.clicked.connect(self.receive_BpubKey) #建立连接
|
||||
self.toolButton.clicked.connect(self.choose_file) #选择文件
|
||||
self.pushButton_3.clicked.connect(self.encrypt_message) #生成对称密钥并加密原文
|
||||
self.pushButton_8.clicked.connect(self.A_key) #生成A的密钥对
|
||||
self.pushButton_2.clicked.connect(self.digital_signature) # 执行数字签名
|
||||
self.pushButton.clicked.connect(self.encrypt_key) # 加密对称密钥
|
||||
self.pushButton_10.clicked.connect(self.update_zip) #发送加密包
|
||||
|
||||
self.pushButton_12.clicked.connect(self.send_BpubKey) #等待连接
|
||||
self.pushButton_4.clicked.connect(self.B_key) # 生成B的密钥对
|
||||
self.pushButton_11.clicked.connect(self.download_zip) #下载加密包
|
||||
self.pushButton_5.clicked.connect(self.decrypt_key) # 解密对称密钥
|
||||
self.pushButton_6.clicked.connect(self.decrypt_ciphertext) # 解密密文
|
||||
self.pushButton_7.clicked.connect(self.verify_signature) # 验证数字签名
|
||||
|
||||
def receive_BpubKey(self):
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(('8.8.8.8', 80))
|
||||
ip = s.getsockname()[0]
|
||||
finally:
|
||||
s.close()
|
||||
try:
|
||||
self.text = self.plainTextEdit.toPlainText()
|
||||
self.host, self.port = self.text.split(':')
|
||||
except:
|
||||
# self.textEdit_2.setText('请输入正确的ip和端口')
|
||||
self.textEdit_2.setText("请输入正确的ip和端口")
|
||||
|
||||
self.host = ip
|
||||
|
||||
try:
|
||||
receive_Bpubkey(self.host,int(self.port))
|
||||
self.textEdit_2.setText('接收成功')
|
||||
except:
|
||||
self.textEdit_2.setText('接收失败')
|
||||
|
||||
def update_zip(self):
|
||||
try:
|
||||
self.text = self.plainTextEdit.toPlainText()
|
||||
self.host, self.port = self.text.split(':')
|
||||
except:
|
||||
self.textEdit_2.setText('请输入正确的ip和端口')
|
||||
try:
|
||||
send_zip(self.host,int(self.port))
|
||||
self.textEdit_2.setText('发送成功')
|
||||
except:
|
||||
self.textEdit_2.setText('发送失败')
|
||||
|
||||
|
||||
def choose_file(self):
|
||||
file_dialog = QFileDialog()
|
||||
file_dialog.setFileMode(QFileDialog.AnyFile)
|
||||
file_dialog.setNameFilter("Text files (*.txt)") # 过滤只显示文本文件
|
||||
file_dialog.setViewMode(QFileDialog.Detail)
|
||||
|
||||
if file_dialog.exec_():
|
||||
file_paths = file_dialog.selectedFiles()
|
||||
self.textEdit_2.setText('\n'.join(file_paths))
|
||||
if file_paths:
|
||||
selected_file_path = file_paths[0]
|
||||
self.send_file_path = selected_file_path
|
||||
|
||||
def encrypt_message(self):
|
||||
if self.send_file_path:
|
||||
current_directory = os.path.dirname(__file__)
|
||||
key_file_path = os.path.join(current_directory, 'symmetric_key.key')
|
||||
|
||||
key = generate_and_save_key(key_file_path)
|
||||
encrypt_file(self.send_file_path, key)
|
||||
self.textEdit_2.setText('加密成功')
|
||||
else:
|
||||
self.textEdit_2.setText("请先选择文件进行加密")
|
||||
|
||||
def A_key(self):
|
||||
A_key()
|
||||
self.textEdit_2.setText('成功生成发送方密钥对')
|
||||
|
||||
def digital_signature(self):
|
||||
if self.send_file_path != None: # 检查是否选择了文件
|
||||
hash_value = digital_signature(self.send_file_path)
|
||||
self.textEdit_2.setText(f"SHA-256摘要值: {hash_value}")
|
||||
self.textEdit_2.setText("数字签名已生成并保存!")
|
||||
else:
|
||||
self.textEdit_2.setText("请先选择文件进行数字签名")
|
||||
|
||||
def encrypt_key(self):
|
||||
try:
|
||||
encrypt_key()
|
||||
self.textEdit_2.setText('对称密钥加密成功')
|
||||
except:
|
||||
self.textEdit_2.setText('加密失败,请检查公钥是否正确')
|
||||
|
||||
|
||||
def B_key(self):
|
||||
B_key()
|
||||
self.textEdit_3.setText('成功生成接收方密钥对')
|
||||
|
||||
def decrypt_key(self):
|
||||
try:
|
||||
decrypt_key()
|
||||
self.textEdit_3.setText('对称密钥解密成功')
|
||||
except:
|
||||
self.textEdit_3.setText('解密失败,请检查私钥是否正确')
|
||||
|
||||
def decrypt_ciphertext(self):
|
||||
try:
|
||||
current_directory = os.path.dirname(__file__)
|
||||
key_file_path = os.path.join(current_directory, 'decrypt_symmetric_key.key')
|
||||
encrypted_file_path = os.path.join(current_directory, 'file.txt.encrypted')
|
||||
|
||||
key = load_key(key_file_path)
|
||||
decrypt_file(encrypted_file_path, key)
|
||||
self.textEdit_3.setText('密文解密成功')
|
||||
except:
|
||||
self.textEdit_3.setText('解密失败,请检查对称密钥是否正确')
|
||||
|
||||
def verify_signature(self):
|
||||
try:
|
||||
verify_digital_signature()
|
||||
self.textEdit_3.setText('数字签名验证成功')
|
||||
except:
|
||||
self.textEdit_3.setText('请检查文件是否齐全且正确:发送方公钥、数字签名、对称密钥、密钥密文')
|
||||
|
||||
def send_BpubKey(self):
|
||||
try:
|
||||
self.text = self.plainTextEdit_2.toPlainText()
|
||||
self.host2, self.port2 = self.text.split(':')
|
||||
except:
|
||||
self.textEdit_3.setText('请输入正确的ip和端口')
|
||||
try:
|
||||
send_Bpubkey(self.host2,int(self.port2))
|
||||
self.textEdit_3.setText('发送成功')
|
||||
except:
|
||||
self.textEdit_3.setText('发送失败')
|
||||
|
||||
def download_zip(self):
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(('8.8.8.8', 80))
|
||||
ip = s.getsockname()[0]
|
||||
finally:
|
||||
s.close()
|
||||
try:
|
||||
self.text = self.plainTextEdit_2.toPlainText()
|
||||
self.host2, self.port2 = self.text.split(':')
|
||||
self.host2 = ip
|
||||
# self.textEdit_3.setText(self.host2,self.port2)
|
||||
except:
|
||||
self.textEdit_3.setText('请输入正确的ip和端口')
|
||||
try:
|
||||
receive_zip(self.host2,int(self.port2))
|
||||
self.textEdit_3.setText('接收成功')
|
||||
except:
|
||||
self.textEdit_3.setText('接收失败')
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
myWin = MyMainWindow()
|
||||
myWin.show()
|
||||
sys.exit(app.exec_())
|
Loading…
Reference in new issue