使用生成公私钥的脚本重新上生成新格式的公私钥文件

main
ps5antq2e 2 months ago
parent 8c3c8208a6
commit 7fa9ac1018

@ -23,6 +23,7 @@ import sys
import json
from gmssl import sm4, func,sm2,sm3
from PyQt5.QtWidgets import QMessageBox,QFileDialog
import rsa
#import sm2random
from OpenSSL import crypto
class Ui_MainWindow(object):
@ -69,6 +70,7 @@ class Ui_MainWindow(object):
self.mode = ""
self.algorithm = ""
self.enc_key = ""
#继承连接实例
self.receiver = receiver
#打开文件选择对话框
@ -76,25 +78,24 @@ class Ui_MainWindow(object):
path=QFileDialog.getOpenFileName()[0]
#弹出消息框
with open(path, "rb") as f:
self.private_key = crypto.load_privatekey(crypto.FILETYPE_PEM, f.read())
self.private_key = rsa.PrivateKey.load_pkcs1(f.read(),'DER')
QMessageBox.information(MainWindow, "提示", "请选择你的公钥文件")
path=QFileDialog.getOpenFileName()[0]
with open(path, "rb") as f:
self.public_key = crypto.load_publickey(crypto.FILETYPE_PEM, f.read())
self.public_key = rsa.PublicKey.load_pkcs1_openssl_pem(f.read())
QMessageBox.information(MainWindow, "提示", "请选择对方的公钥文件")
path=QFileDialog.getOpenFileName()[0]
with open(path, "rb") as f:
self.public_key_other = crypto.load_publickey(crypto.FILETYPE_PEM, f.read())
self.public_key_other = rsa.PublicKey.load_pkcs1_openssl_pem(f.read())
self.iv = ""
self.encrypted_text = ""
self.key=""
self.plaintext=''
self.retranslateUi(MainWindow)
self.receive_button.clicked.connect(self.receive) # type: ignore
self.decrypt_button.clicked.connect(self.decrypt) # type: ignore
self.verify_button.clicked.connect(self.verify) # type: ignore
QtCore.QMetaObject.connectSlotsByName(MainWindow)
#继承连接实例
self.client = client
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
@ -105,7 +106,7 @@ class Ui_MainWindow(object):
#接收信封并解封保存,加密后的对称密钥,密文,签名
data = b""
while True:
sender_socket = self.receiver.accept()
sender_socket,addr = self.receiver.accept()
envelope_dict = sender_socket.recv(1024)
if not envelope_dict:
break
@ -124,8 +125,7 @@ class Ui_MainWindow(object):
self.client.close()
def decrypt_key(self):
#使用rsa私钥解密对称密钥self.enc_key,赋给self.key
cipher_rsa = PKCS1_OAEP.new(self.private_key)
self.key = cipher_rsa.decrypt(f.read())
self.key = rsa.decrypt(self.enc_key, self.private_key)
def decrypt(self):
#根据模式和加密算法解密
# self.algorithm = self.algorithm_box.currentText()
@ -141,7 +141,7 @@ class Ui_MainWindow(object):
self.encrypted_text = f.read()
cryptor = AES.new(self.key, self.mode, self.key)
plain_text = cryptor.decrypt(a2b_hex(self.encrypted_text))
self.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)
@ -151,7 +151,7 @@ class Ui_MainWindow(object):
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))
self.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)
@ -162,7 +162,7 @@ class Ui_MainWindow(object):
if self.mode=="CBC":
sm4_crypt = sm4.CryptSM4()
sm4_crypt.set_key(self.key, sm4.SM4_DECRYPT)
plaintext=sm4_crypt.crypt_cbc(self.iv,self.encrypted_text)
self.plaintext=sm4_crypt.crypt_cbc(self.iv,self.encrypted_text)
save_path= QFileDialog.saveFileContent(MainWindow, "Save File", "default.txt", "All Files (*);;Text Files (*.txt)")
with open(save_path, "wb") as f:
f.write(plaintext)
@ -170,7 +170,7 @@ class Ui_MainWindow(object):
elif self.mode=="ECB":
sm4_crypt = sm4.CryptSM4()
sm4_crypt.set_key(self.key, sm4.SM4_DECRYPT)
plaintext=sm4_crypt.crypt_ecb(self.encrypted_text)
self.plaintext=sm4_crypt.crypt_ecb(self.encrypted_text)
save_path= QFileDialog.saveFileContent(MainWindow, "Save File", "default.txt", "All Files (*);;Text Files (*.txt)")
with open(save_path, "wb") as f:
f.write(plaintext)
@ -181,19 +181,24 @@ class Ui_MainWindow(object):
print("error")
def verify(self):
#使用对方公钥验证签名
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)):
# 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("验证失败")
digest= hashlib.sha256(self.plaintext.encode("utf-8")).digest()
if rsa.verify(self.public_key, digest, self.signature):
self.textBrowser.append("验证成功")
else:
self.textBrowser.append("验证失败")

Loading…
Cancel
Save