Update receiver_ui.py

main
pvc6hnqgo 2 months ago
parent 04425eeddc
commit 7ea485a30d

@ -7,14 +7,23 @@
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import base64
from PyQt5.QtWidgets import QFileDialog,QMainWindow
import socket
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Signature import PKCS1_v1_5
import hashlib
from Crypto.Hash import SHA512
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import json
from gmssl import sm4, func,sm2,sm3
from PyQt5.QtWidgets import QMessageBox,QFileDialog
import socket
import sm2random
#import sm2random
from OpenSSL import crypto
class Ui_MainWindow(object):
def setupUi(self, MainWindow,client):
@ -60,6 +69,7 @@ class Ui_MainWindow(object):
self.mode = ""
self.algorithm = ""
self.enc_key = ""
#打开文件选择对话框
QMessageBox.information(MainWindow, "提示", "请选择你的私钥文件")
path=QFileDialog.getOpenFileName()[0]
@ -110,22 +120,59 @@ class Ui_MainWindow(object):
self.decrypt_key()
self.decrypt()
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):
#使用sm2私钥解密对称密钥self.enc_key,赋给self.key
sm2_crypt = sm2.CryptSM2(private_key=self.private_key,public_key=self.public_key,)
try:
self.key = sm2_crypt.decrypt(self.enc_key)
print("key:",self.key)
except Exception as e:
print(f"[!] Failed to decrypt SM4 key: {e}")
raise
#使用rsa私钥解密对称密钥self.enc_key,赋给self.key
cipher_rsa = PKCS1_OAEP.new(self.private_key)
self.key = cipher_rsa.decrypt(f.read())
def decrypt(self):
#根据模式和加密算法解密
# self.algorithm = self.algorithm_box.currentText()
# self.mode = self.mode_box.currentText()
self.algorithm = "AES"
self.mode = "CBC"
with open("aeskey.txt",'rb') as f:
self.key = "1234567890abcdef".encode("utf-8")
if self.algorithm=="AES":
if self.mode=="CBC":
pass
self.mode = AES.MODE_CBC
with open("ciphertext.bin", "rb") as f:
self.encrypted_text = f.read()
cryptor = AES.new(self.key, self.mode, self.key)
plain_text = cryptor.decrypt(a2b_hex(self.encrypted_text))
#print(plain_text)
plaintext = b2a_hex(plain_text.rstrip(b'\0')).decode("utf-8")
self.textBrowser.append(plaintext)
elif self.mode=="ECB":
pass
self.mode = AES.MODE_ECB
with open("ciphertext.bin", "rb") as f:
self.encrypted_text = f.read()
cryptor = AES.new(self.key, self.mode)
plain_text = cryptor.decrypt(a2b_hex(self.encrypted_text))
#print(plain_text)
plaintext = b2a_hex(plain_text.rstrip(b'\0')).decode("utf-8")
self.textBrowser.append(plaintext)
else:
print("error")
elif self.algorithm=="SM4":
@ -150,8 +197,23 @@ class Ui_MainWindow(object):
else:
print("error")
def verify(self):
pass
#使用对方公钥验证签名
plaintext = """zhangruixiazhangruixiazhangruixia
helloguet
hellopython
helloworld"""
key = RSA.importKey(self.private_key)
data = hashlib.sha512(plaintext.encode("utf-8")).hexdigest()
h = SHA512.new(data.encode("utf-8"))
#print(h)
verifier = PKCS1_v1_5.new(key)
with open("digitalsign.bin", "rb") as f:
signature = f.read()
signature = signature.decode("utf-8")
if verifier.verify(h, base64.b64decode(signature)):
self.textBrowser.append("验证成功")
else:
self.textBrowser.append("验证失败")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()

Loading…
Cancel
Save