Ошибка дешифрования сообщения в RSA
У меня есть код, который может кодировать сообщение и сохранять их в файл .txt, так и декодировать эти данные.
Но при декодирование возникает ошибка, как это решить?
main.py
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from crypto import Ui_MainWindow
from PyQt5.Qt import *
import rsa
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("Automatic OGE verification system ver.00.04.75")
(self.key_pub, self.key_priv) = rsa.newkeys(512)
self.pushButton_2.clicked.connect(self.information)
self.pushButton_3.clicked.connect(self.app_key_task)
def information(self):
self.key_crypto = self.lineEdit_13.text()
self.directory_file_ver = self.lineEdit_14.text()
self.directory_save = self.lineEdit_15.text()
self.directory_key = self.lineEdit_16.text()
self.name_key = self.lineEdit_17.text()
self.key_task()
def key_task(self):
self.number_1 = self.lineEdit.text()
self.number_2 = self.lineEdit_2.text()
self.number_3 = self.lineEdit_3.text()
self.number_4 = self.lineEdit_4.text()
self.number_5 = self.lineEdit_5.text()
self.number_6 = self.lineEdit_6.text()
self.number_7 = self.lineEdit_7.text()
self.number_8 = self.lineEdit_8.text()
self.number_9 = self.lineEdit_9.text()
self.number_10 = self.lineEdit_10.text()
self.number_11 = self.lineEdit_11.text()
self.number_12 = self.lineEdit_12.text()
self.key_task_crypto()
def key_task_crypto(self):
self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), self.key_pub)
self.number_2_crypto = rsa.encrypt(self.number_2.encode('utf8'), self.key_pub)
self.number_3_crypto = rsa.encrypt(self.number_3.encode('utf8'), self.key_pub)
self.number_4_crypto = rsa.encrypt(self.number_4.encode('utf8'), self.key_pub)
self.number_5_crypto = rsa.encrypt(self.number_5.encode('utf8'), self.key_pub)
self.number_6_crypto = rsa.encrypt(self.number_6.encode('utf8'), self.key_pub)
self.number_7_crypto = rsa.encrypt(self.number_7.encode('utf8'), self.key_pub)
self.number_8_crypto = rsa.encrypt(self.number_8.encode('utf8'), self.key_pub)
self.number_9_crypto = rsa.encrypt(self.number_9.encode('utf8'), self.key_pub)
self.number_10_crypto = rsa.encrypt(self.number_10.encode('utf8'), self.key_pub)
self.number_11_crypto = rsa.encrypt(self.number_11.encode('utf8'), self.key_pub)
self.number_12_crypto = rsa.encrypt(self.number_12.encode('utf8'), self.key_pub)
self.load_key_task_crypto()
def load_key_task_crypto(self):
k = [self.number_1_crypto, self.number_2_crypto, self.number_3_crypto, self.number_4_crypto,
self.number_5_crypto, self.number_6_crypto, self.number_7_crypto, self.number_8_crypto,
self.number_9_crypto, self.number_10_crypto, self.number_11_crypto, self.number_12_crypto,
self.key_crypto]
directory_save_key = self.directory_key + self.name_key + ".txt"
with open(directory_save_key, "w") as f:
f.write("\n".join(str(item) for item in k))
#####################################
def app_key_task(self):
directory_file, _ = QFileDialog.getOpenFileName(None, ".", "*.txt")
print(f'directory_file = {directory_file} <----')
with open(directory_file, "r", encoding='utf-8') as file:
print(file)
self.number_1_decrypto = (file.readline().strip())
self.number_2_decrypto = file.readline().strip()
self.number_3_decrypto = file.readline().strip()
self.number_4_decrypto = file.readline().strip()
self.number_5_decrypto = file.readline().strip()
self.number_6_decrypto = file.readline().strip()
self.number_7_decrypto = file.readline().strip()
self.number_8_decrypto = file.readline().strip()
self.number_9_decrypto = file.readline().strip()
self.number_10_decrypto = file.readline().strip()
self.number_11_decrypto = file.readline().strip()
self.number_12_decrypto = file.readline().strip()
print(f'self.number_1_decrypto = {self.number_1_decrypto}')
print(f'self.number_2_decrypto = {self.number_2_decrypto}')
print(f'self.number_3_decrypto = {self.number_3_decrypto}')
print(f'self.number_4_decrypto = {self.number_4_decrypto}')
print(f'self.number_5_decrypto = {self.number_5_decrypto}')
print(f'self.number_6_decrypto = {self.number_6_decrypto}')
print(f'self.number_7_decrypto = {self.number_7_decrypto}')
print(f'self.number_8_decrypto = {self.number_8_decrypto}')
print(f'self.number_9_decrypto = {self.number_9_decrypto}')
print(f'self.number_10_decrypto= {self.number_10_decrypto}')
print(f'self.number_11_decrypto= {self.number_11_decrypto}')
print(f'self.number_12_decrypto= {self.number_12_decrypto}')
message = rsa.decrypt(self.number_1_decrypto, self.key_priv)
print(message.decode('utf8'))
#######################################
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
app.setStyle("Fusion")
sys.exit(app.exec_())
crypto.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'crypto.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# 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.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 514)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_3)
self.gridLayout_2.setObjectName("gridLayout_2")
self.groupBox = QtWidgets.QGroupBox(self.tab_3)
self.groupBox.setObjectName("groupBox")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
self.gridLayout_4.setObjectName("gridLayout_4")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.lineEdit_7 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_7.setObjectName("lineEdit_7")
self.gridLayout_3.addWidget(self.lineEdit_7, 6, 1, 1, 1)
self.lineEdit_8 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_8.setObjectName("lineEdit_8")
self.gridLayout_3.addWidget(self.lineEdit_8, 7, 1, 1, 1)
self.lineEdit_9 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_9.setObjectName("lineEdit_9")
self.gridLayout_3.addWidget(self.lineEdit_9, 8, 1, 1, 1)
self.lineEdit_11 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_11.setObjectName("lineEdit_11")
self.gridLayout_3.addWidget(self.lineEdit_11, 10, 1, 1, 1)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_3.setObjectName("lineEdit_3")
self.gridLayout_3.addWidget(self.lineEdit_3, 2, 1, 1, 1)
self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_5.setObjectName("lineEdit_5")
self.gridLayout_3.addWidget(self.lineEdit_5, 4, 1, 1, 1)
self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_4.setObjectName("lineEdit_4")
self.gridLayout_3.addWidget(self.lineEdit_4, 3, 1, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_3.addWidget(self.lineEdit_2, 1, 1, 1, 1)
self.lineEdit_6 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_6.setObjectName("lineEdit_6")
self.gridLayout_3.addWidget(self.lineEdit_6, 5, 1, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout_3.addWidget(self.lineEdit, 0, 1, 1, 1)
self.lineEdit_10 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_10.setObjectName("lineEdit_10")
self.gridLayout_3.addWidget(self.lineEdit_10, 9, 1, 1, 1)
self.lineEdit_12 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_12.setObjectName("lineEdit_12")
self.gridLayout_3.addWidget(self.lineEdit_12, 11, 1, 1, 1)
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setObjectName("label")
self.gridLayout_3.addWidget(self.label, 0, 0, 1, 1)
self.label_2 = QtWidgets.QLabel(self.groupBox)
self.label_2.setObjectName("label_2")
self.gridLayout_3.addWidget(self.label_2, 1, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.groupBox)
self.label_3.setObjectName("label_3")
self.gridLayout_3.addWidget(self.label_3, 2, 0, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox)
self.label_4.setObjectName("label_4")
self.gridLayout_3.addWidget(self.label_4, 3, 0, 1, 1)
self.label_5 = QtWidgets.QLabel(self.groupBox)
self.label_5.setObjectName("label_5")
self.gridLayout_3.addWidget(self.label_5, 4, 0, 1, 1)
self.label_6 = QtWidgets.QLabel(self.groupBox)
self.label_6.setObjectName("label_6")
self.gridLayout_3.addWidget(self.label_6, 5, 0, 1, 1)
self.label_7 = QtWidgets.QLabel(self.groupBox)
self.label_7.setObjectName("label_7")
self.gridLayout_3.addWidget(self.label_7, 6, 0, 1, 1)
self.label_8 = QtWidgets.QLabel(self.groupBox)
self.label_8.setObjectName("label_8")
self.gridLayout_3.addWidget(self.label_8, 7, 0, 1, 1)
self.label_9 = QtWidgets.QLabel(self.groupBox)
self.label_9.setObjectName("label_9")
self.gridLayout_3.addWidget(self.label_9, 8, 0, 1, 1)
self.label_10 = QtWidgets.QLabel(self.groupBox)
self.label_10.setObjectName("label_10")
self.gridLayout_3.addWidget(self.label_10, 9, 0, 1, 1)
self.label_11 = QtWidgets.QLabel(self.groupBox)
self.label_11.setObjectName("label_11")
self.gridLayout_3.addWidget(self.label_11, 10, 0, 1, 1)
self.label_12 = QtWidgets.QLabel(self.groupBox)
self.label_12.setObjectName("label_12")
self.gridLayout_3.addWidget(self.label_12, 11, 0, 1, 1)
self.gridLayout_4.addLayout(self.gridLayout_3, 0, 0, 1, 1)
self.groupBox_2 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_2.setObjectName("groupBox_2")
self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2)
self.gridLayout_5.setObjectName("gridLayout_5")
self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_3.setObjectName("pushButton_3")
self.gridLayout_5.addWidget(self.pushButton_3, 7, 0, 1, 2)
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout_5.addWidget(self.pushButton_2, 6, 0, 1, 2)
self.label_19 = QtWidgets.QLabel(self.groupBox_2)
self.label_19.setObjectName("label_19")
self.gridLayout_5.addWidget(self.label_19, 4, 0, 1, 1)
self.lineEdit_14 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_14.setObjectName("lineEdit_14")
self.gridLayout_5.addWidget(self.lineEdit_14, 1, 1, 1, 1)
self.lineEdit_17 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_17.setObjectName("lineEdit_17")
self.gridLayout_5.addWidget(self.lineEdit_17, 4, 1, 1, 1)
self.label_14 = QtWidgets.QLabel(self.groupBox_2)
self.label_14.setObjectName("label_14")
self.gridLayout_5.addWidget(self.label_14, 1, 0, 1, 1)
self.label_15 = QtWidgets.QLabel(self.groupBox_2)
self.label_15.setObjectName("label_15")
self.gridLayout_5.addWidget(self.label_15, 5, 0, 1, 1)
self.comboBox = QtWidgets.QComboBox(self.groupBox_2)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.gridLayout_5.addWidget(self.comboBox, 5, 1, 1, 1)
self.lineEdit_15 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_15.setObjectName("lineEdit_15")
self.gridLayout_5.addWidget(self.lineEdit_15, 2, 1, 1, 1)
self.label_16 = QtWidgets.QLabel(self.groupBox_2)
self.label_16.setObjectName("label_16")
self.gridLayout_5.addWidget(self.label_16, 2, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton.setObjectName("pushButton")
self.gridLayout_5.addWidget(self.pushButton, 9, 0, 1, 2)
self.lineEdit_16 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_16.setObjectName("lineEdit_16")
self.gridLayout_5.addWidget(self.lineEdit_16, 3, 1, 1, 1)
self.label_18 = QtWidgets.QLabel(self.groupBox_2)
self.label_18.setObjectName("label_18")
self.gridLayout_5.addWidget(self.label_18, 3, 0, 1, 1)
self.label_13 = QtWidgets.QLabel(self.groupBox_2)
self.label_13.setObjectName("label_13")
self.gridLayout_5.addWidget(self.label_13, 0, 0, 1, 1)
self.lineEdit_13 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_13.setObjectName("lineEdit_13")
self.gridLayout_5.addWidget(self.lineEdit_13, 0, 1, 1, 1)
self.gridLayout_4.addWidget(self.groupBox_2, 0, 1, 1, 1)
self.gridLayout_2.addWidget(self.groupBox, 0, 0, 1, 1)
self.tabWidget.addTab(self.tab_3, "")
self.tab_5 = QtWidgets.QWidget()
self.tab_5.setObjectName("tab_5")
self.tabWidget.addTab(self.tab_5, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.tabWidget.addTab(self.tab_4, "")
self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 1)
self.label_17 = QtWidgets.QLabel(self.centralwidget)
self.label_17.setObjectName("label_17")
self.gridLayout.addWidget(self.label_17, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.tabWidget.setToolTip(_translate("MainWindow", "<html><head/><body><p>Дишифрование файлов</p></body></html>"))
self.tabWidget.setWhatsThis(_translate("MainWindow", "<html><head/><body><p>Дишифрование</p></body></html>"))
self.groupBox.setTitle(_translate("MainWindow", "Ответы на задания ОГЭ с КРАТКИМ ОТВЕТОМ (проверка/настройка ключей с ответами)"))
self.label.setText(_translate("MainWindow", "Ответ на задание №1"))
self.label_2.setText(_translate("MainWindow", "Ответ на задание №2"))
self.label_3.setText(_translate("MainWindow", "Ответ на задание №3"))
self.label_4.setText(_translate("MainWindow", "Ответ на задание №4"))
self.label_5.setText(_translate("MainWindow", "Ответ на задание №5"))
self.label_6.setText(_translate("MainWindow", "Ответ на задание №6"))
self.label_7.setText(_translate("MainWindow", "Ответ на задание №7"))
self.label_8.setText(_translate("MainWindow", "Ответ на задание №8"))
self.label_9.setText(_translate("MainWindow", "Ответ на задание №9"))
self.label_10.setText(_translate("MainWindow", "Ответ на задание №10"))
self.label_11.setText(_translate("MainWindow", "Ответ на задание №11"))
self.label_12.setText(_translate("MainWindow", "Ответ на задание №12"))
self.groupBox_2.setTitle(_translate("MainWindow", "Общие настройки"))
self.pushButton_3.setText(_translate("MainWindow", "Загрузить ключ с ответами"))
self.pushButton_2.setText(_translate("MainWindow", "Сохранить данные"))
self.label_19.setText(_translate("MainWindow", "Имя файла с ключем ответа"))
self.label_14.setText(_translate("MainWindow", "Директория файлов для \n"
"проверки"))
self.label_15.setText(_translate("MainWindow", "Вывод данных в файл типа"))
self.comboBox.setItemText(0, _translate("MainWindow", ".txt"))
self.comboBox.setItemText(1, _translate("MainWindow", ".csv"))
self.comboBox.setItemText(2, _translate("MainWindow", ".docx"))
self.label_16.setText(_translate("MainWindow", "<html><head/><body><p>Директория сохранения </p><p>проверенных файлов</p></body></html>"))
self.pushButton.setText(_translate("MainWindow", "Дишифровать файлы"))
self.label_18.setText(_translate("MainWindow", "<html><head/><body><p>Директория файлов с </p><p>ключем ответов</p></body></html>"))
self.label_13.setText(_translate("MainWindow", "Ключ шифрования данных"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Дешифровка"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("MainWindow", "Настройка заданий"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "Статистика"))
self.label_17.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-weight:600;\">ВНИМАНИЕ! ДАННАЯ ВЕРСИЯ ПРОГРАММА НАХОДИТСЯ В БЕТА ВЕРСИИ, В НЕЙ МОГУТ ПРИСУДСТВОВАТЬ</span></p><p><span style=\" font-weight:600;\">НЕ РАБОЧИЕ ФУНКЦИИ. ПОЛЬЗУЯСЬ ПРОГРАММОЙ ВЫ СОГЛАШАЕТЕСЬ С ПРАВИЛАМИ ЕЁ ИСПОЛЬЗОВАНИЯ. </span></p><p>(c)Copyrigth by Alexandrov Andrey </p></body></html>"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Update:
Код ошибки:
Traceback (most recent call last):
File "crypto_log.py", line 107, in app_key_task message = rsa.decrypt(self.number_1_decrypto, self.key_priv)
File "G:\PyCharm\Python_x32\Python_3_8_10\lib\site-packages\rsa\pkcs1.py", line 255, in decrypt encrypted = transform.bytes2int(crypto)
File "G:\PyCharm\Python_x32\Python_3_8_10\lib\site-packages\rsa\transform.py", line 34, in bytes2int return int.from_bytes(raw_bytes, "big", signed=False)
TypeError: cannot convert 'str' object to bytes
Чтобы получить данную ошибку нужно: после запуска программы открыть файл ранее созданные с зашифрованными данными (если такой отсутствует, то создать при помощи кнопки "Сохранить данные"), после чего в cmd появится данная ошибка.
Update 2:
Если я сохраняю данные в файл, то при следующем заходе в программу я не могу его дешифровать.
Просто, файлов с ответами должно быть множество, а открывать их должны в любое время.
А если сохранять ключ созданный при шифрование и потом с помощью его и производить дешифровку?
Ответы (2 шт):
Я прокомментировал свои изменение и добавления по тексту программы.
Обратите внимание, что кодировать сообщение и сохранять их в файл, так и декодировать их из файла вы можете в рамках одного сеанса приложения.
Так как при каждом новом запуске приложения вы создаете новые ключи:
(self.key_pub, self.key_priv) = rsa.newkeys(512)
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
import rsa
import base64 # !!! +++
#from crypto import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 514)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_3)
self.gridLayout_2.setObjectName("gridLayout_2")
self.groupBox = QtWidgets.QGroupBox(self.tab_3)
self.groupBox.setObjectName("groupBox")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
self.gridLayout_4.setObjectName("gridLayout_4")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.lineEdit_7 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_7.setObjectName("lineEdit_7")
self.gridLayout_3.addWidget(self.lineEdit_7, 6, 1, 1, 1)
self.lineEdit_8 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_8.setObjectName("lineEdit_8")
self.gridLayout_3.addWidget(self.lineEdit_8, 7, 1, 1, 1)
self.lineEdit_9 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_9.setObjectName("lineEdit_9")
self.gridLayout_3.addWidget(self.lineEdit_9, 8, 1, 1, 1)
self.lineEdit_11 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_11.setObjectName("lineEdit_11")
self.gridLayout_3.addWidget(self.lineEdit_11, 10, 1, 1, 1)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_3.setObjectName("lineEdit_3")
self.gridLayout_3.addWidget(self.lineEdit_3, 2, 1, 1, 1)
self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_5.setObjectName("lineEdit_5")
self.gridLayout_3.addWidget(self.lineEdit_5, 4, 1, 1, 1)
self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_4.setObjectName("lineEdit_4")
self.gridLayout_3.addWidget(self.lineEdit_4, 3, 1, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_3.addWidget(self.lineEdit_2, 1, 1, 1, 1)
self.lineEdit_6 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_6.setObjectName("lineEdit_6")
self.gridLayout_3.addWidget(self.lineEdit_6, 5, 1, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout_3.addWidget(self.lineEdit, 0, 1, 1, 1)
self.lineEdit_10 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_10.setObjectName("lineEdit_10")
self.gridLayout_3.addWidget(self.lineEdit_10, 9, 1, 1, 1)
self.lineEdit_12 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_12.setObjectName("lineEdit_12")
self.gridLayout_3.addWidget(self.lineEdit_12, 11, 1, 1, 1)
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setObjectName("label")
self.gridLayout_3.addWidget(self.label, 0, 0, 1, 1)
self.label_2 = QtWidgets.QLabel(self.groupBox)
self.label_2.setObjectName("label_2")
self.gridLayout_3.addWidget(self.label_2, 1, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.groupBox)
self.label_3.setObjectName("label_3")
self.gridLayout_3.addWidget(self.label_3, 2, 0, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox)
self.label_4.setObjectName("label_4")
self.gridLayout_3.addWidget(self.label_4, 3, 0, 1, 1)
self.label_5 = QtWidgets.QLabel(self.groupBox)
self.label_5.setObjectName("label_5")
self.gridLayout_3.addWidget(self.label_5, 4, 0, 1, 1)
self.label_6 = QtWidgets.QLabel(self.groupBox)
self.label_6.setObjectName("label_6")
self.gridLayout_3.addWidget(self.label_6, 5, 0, 1, 1)
self.label_7 = QtWidgets.QLabel(self.groupBox)
self.label_7.setObjectName("label_7")
self.gridLayout_3.addWidget(self.label_7, 6, 0, 1, 1)
self.label_8 = QtWidgets.QLabel(self.groupBox)
self.label_8.setObjectName("label_8")
self.gridLayout_3.addWidget(self.label_8, 7, 0, 1, 1)
self.label_9 = QtWidgets.QLabel(self.groupBox)
self.label_9.setObjectName("label_9")
self.gridLayout_3.addWidget(self.label_9, 8, 0, 1, 1)
self.label_10 = QtWidgets.QLabel(self.groupBox)
self.label_10.setObjectName("label_10")
self.gridLayout_3.addWidget(self.label_10, 9, 0, 1, 1)
self.label_11 = QtWidgets.QLabel(self.groupBox)
self.label_11.setObjectName("label_11")
self.gridLayout_3.addWidget(self.label_11, 10, 0, 1, 1)
self.label_12 = QtWidgets.QLabel(self.groupBox)
self.label_12.setObjectName("label_12")
self.gridLayout_3.addWidget(self.label_12, 11, 0, 1, 1)
self.gridLayout_4.addLayout(self.gridLayout_3, 0, 0, 1, 1)
self.groupBox_2 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_2.setObjectName("groupBox_2")
self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2)
self.gridLayout_5.setObjectName("gridLayout_5")
self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_3.setObjectName("pushButton_3")
self.gridLayout_5.addWidget(self.pushButton_3, 7, 0, 1, 2)
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout_5.addWidget(self.pushButton_2, 6, 0, 1, 2)
self.label_19 = QtWidgets.QLabel(self.groupBox_2)
self.label_19.setObjectName("label_19")
self.gridLayout_5.addWidget(self.label_19, 4, 0, 1, 1)
self.lineEdit_14 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_14.setObjectName("lineEdit_14")
self.gridLayout_5.addWidget(self.lineEdit_14, 1, 1, 1, 1)
self.lineEdit_17 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_17.setObjectName("lineEdit_17")
self.gridLayout_5.addWidget(self.lineEdit_17, 4, 1, 1, 1)
self.label_14 = QtWidgets.QLabel(self.groupBox_2)
self.label_14.setObjectName("label_14")
self.gridLayout_5.addWidget(self.label_14, 1, 0, 1, 1)
self.label_15 = QtWidgets.QLabel(self.groupBox_2)
self.label_15.setObjectName("label_15")
self.gridLayout_5.addWidget(self.label_15, 5, 0, 1, 1)
self.comboBox = QtWidgets.QComboBox(self.groupBox_2)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.gridLayout_5.addWidget(self.comboBox, 5, 1, 1, 1)
self.lineEdit_15 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_15.setObjectName("lineEdit_15")
self.gridLayout_5.addWidget(self.lineEdit_15, 2, 1, 1, 1)
self.label_16 = QtWidgets.QLabel(self.groupBox_2)
self.label_16.setObjectName("label_16")
self.gridLayout_5.addWidget(self.label_16, 2, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton.setObjectName("pushButton")
self.gridLayout_5.addWidget(self.pushButton, 9, 0, 1, 2)
self.lineEdit_16 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_16.setObjectName("lineEdit_16")
self.gridLayout_5.addWidget(self.lineEdit_16, 3, 1, 1, 1)
self.label_18 = QtWidgets.QLabel(self.groupBox_2)
self.label_18.setObjectName("label_18")
self.gridLayout_5.addWidget(self.label_18, 3, 0, 1, 1)
self.label_13 = QtWidgets.QLabel(self.groupBox_2)
self.label_13.setObjectName("label_13")
self.gridLayout_5.addWidget(self.label_13, 0, 0, 1, 1)
self.lineEdit_13 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_13.setObjectName("lineEdit_13")
self.gridLayout_5.addWidget(self.lineEdit_13, 0, 1, 1, 1)
self.gridLayout_4.addWidget(self.groupBox_2, 0, 1, 1, 1)
self.gridLayout_2.addWidget(self.groupBox, 0, 0, 1, 1)
self.tabWidget.addTab(self.tab_3, "")
self.tab_5 = QtWidgets.QWidget()
self.tab_5.setObjectName("tab_5")
self.tabWidget.addTab(self.tab_5, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.tabWidget.addTab(self.tab_4, "")
self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 1)
self.label_17 = QtWidgets.QLabel(self.centralwidget)
self.label_17.setObjectName("label_17")
self.gridLayout.addWidget(self.label_17, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.tabWidget.setToolTip(_translate("MainWindow", "<html><head/><body><p>Дишифрование файлов</p></body></html>"))
self.tabWidget.setWhatsThis(_translate("MainWindow", "<html><head/><body><p>Дишифрование</p></body></html>"))
self.groupBox.setTitle(_translate("MainWindow", "Ответы на задания ОГЭ с КРАТКИМ ОТВЕТОМ (проверка/настройка ключей с ответами)"))
self.label.setText(_translate("MainWindow", "Ответ на задание №1"))
self.label_2.setText(_translate("MainWindow", "Ответ на задание №2"))
self.label_3.setText(_translate("MainWindow", "Ответ на задание №3"))
self.label_4.setText(_translate("MainWindow", "Ответ на задание №4"))
self.label_5.setText(_translate("MainWindow", "Ответ на задание №5"))
self.label_6.setText(_translate("MainWindow", "Ответ на задание №6"))
self.label_7.setText(_translate("MainWindow", "Ответ на задание №7"))
self.label_8.setText(_translate("MainWindow", "Ответ на задание №8"))
self.label_9.setText(_translate("MainWindow", "Ответ на задание №9"))
self.label_10.setText(_translate("MainWindow", "Ответ на задание №10"))
self.label_11.setText(_translate("MainWindow", "Ответ на задание №11"))
self.label_12.setText(_translate("MainWindow", "Ответ на задание №12"))
self.groupBox_2.setTitle(_translate("MainWindow", "Общие настройки"))
self.pushButton_3.setText(_translate("MainWindow", "Загрузить ключ с ответами"))
self.pushButton_2.setText(_translate("MainWindow", "Сохранить данные"))
self.label_19.setText(_translate("MainWindow", "Имя файла с ключем ответа"))
self.label_14.setText(_translate("MainWindow", "Директория файлов для \n"
"проверки"))
self.label_15.setText(_translate("MainWindow", "Вывод данных в файл типа"))
self.comboBox.setItemText(0, _translate("MainWindow", ".txt"))
self.comboBox.setItemText(1, _translate("MainWindow", ".csv"))
self.comboBox.setItemText(2, _translate("MainWindow", ".docx"))
self.label_16.setText(_translate("MainWindow", "<html><head/><body><p>Директория сохранения </p><p>проверенных файлов</p></body></html>"))
self.pushButton.setText(_translate("MainWindow", "Дишифровать файлы"))
self.label_18.setText(_translate("MainWindow", "<html><head/><body><p>Директория файлов с </p><p>ключем ответов</p></body></html>"))
self.label_13.setText(_translate("MainWindow", "Ключ шифрования данных"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Дешифровка"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("MainWindow", "Настройка заданий"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "Статистика"))
self.label_17.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-weight:600;\">ВНИМАНИЕ! ДАННАЯ ВЕРСИЯ ПРОГРАММА НАХОДИТСЯ В БЕТА ВЕРСИИ, В НЕЙ МОГУТ ПРИСУДСТВОВАТЬ</span></p><p><span style=\" font-weight:600;\">НЕ РАБОЧИЕ ФУНКЦИИ. ПОЛЬЗУЯСЬ ПРОГРАММОЙ ВЫ СОГЛАШАЕТЕСЬ С ПРАВИЛАМИ ЕЁ ИСПОЛЬЗОВАНИЯ. </span></p><p>(c)Copyrigth by Alexandrov Andrey </p></body></html>"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("Automatic OGE verification system ver.00.04.75")
(self.key_pub, self.key_priv) = rsa.newkeys(512)
# print(f'{type(self.key_pub)} = {self.key_pub}') #
# print(f'{type(self.key_priv)} = {self.key_priv}') #
self.pushButton_2.clicked.connect(self.information)
self.pushButton_3.clicked.connect(self.app_key_task)
# +++ добавил для тестирования
self.lineEdit.setText('hello')
self.lineEdit_2.setText('привет')
self.lineEdit_13.setText('12345')
self.lineEdit_17.setText('1111')
def information(self):
self.key_crypto = self.lineEdit_13.text()
self.directory_file_ver = self.lineEdit_14.text()
self.directory_save = self.lineEdit_15.text()
self.directory_key = self.lineEdit_16.text()
self.name_key = self.lineEdit_17.text()
self.key_task()
def key_task(self):
self.number_1 = self.lineEdit.text()
self.number_2 = self.lineEdit_2.text()
self.number_3 = self.lineEdit_3.text()
self.number_4 = self.lineEdit_4.text()
self.number_5 = self.lineEdit_5.text()
self.number_6 = self.lineEdit_6.text()
self.number_7 = self.lineEdit_7.text()
self.number_8 = self.lineEdit_8.text()
self.number_9 = self.lineEdit_9.text()
self.number_10 = self.lineEdit_10.text()
self.number_11 = self.lineEdit_11.text()
self.number_12 = self.lineEdit_12.text()
self.key_task_crypto()
def key_task_crypto(self):
self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), self.key_pub)
self.number_2_crypto = rsa.encrypt(self.number_2.encode('utf8'), self.key_pub)
self.number_3_crypto = rsa.encrypt(self.number_3.encode('utf8'), self.key_pub)
self.number_4_crypto = rsa.encrypt(self.number_4.encode('utf8'), self.key_pub)
self.number_5_crypto = rsa.encrypt(self.number_5.encode('utf8'), self.key_pub)
self.number_6_crypto = rsa.encrypt(self.number_6.encode('utf8'), self.key_pub)
self.number_7_crypto = rsa.encrypt(self.number_7.encode('utf8'), self.key_pub)
self.number_8_crypto = rsa.encrypt(self.number_8.encode('utf8'), self.key_pub)
self.number_9_crypto = rsa.encrypt(self.number_9.encode('utf8'), self.key_pub)
self.number_10_crypto = rsa.encrypt(self.number_10.encode('utf8'), self.key_pub)
self.number_11_crypto = rsa.encrypt(self.number_11.encode('utf8'), self.key_pub)
self.number_12_crypto = rsa.encrypt(self.number_12.encode('utf8'), self.key_pub)
# !!! +++
self.key_crypto = rsa.encrypt(self.key_crypto.encode('utf8'), self.key_pub) # !!! +++
self.load_key_task_crypto()
def load_key_task_crypto(self):
k = [self.number_1_crypto, self.number_2_crypto, self.number_3_crypto, self.number_4_crypto,
self.number_5_crypto, self.number_6_crypto, self.number_7_crypto, self.number_8_crypto,
self.number_9_crypto, self.number_10_crypto, self.number_11_crypto, self.number_12_crypto,
self.key_crypto]
# k - список <class 'bytes'>.
# чтобы записать элемент данного списка в файл,
# надо указать, режим открытия файла в двоичном режиме - "wb".
print(f'\n{type(self.number_1_crypto)}; \n{self.number_1_crypto}\n') #
directory_save_key = self.directory_key + self.name_key + ".txt"
# открыть файл в текстовом режиме ---> v
with open(directory_save_key, "w") as f:
# --------------------------> vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv <---- это строка
f.write("\n".join(base64.b64encode(item).decode('utf8') for item in k))
def app_key_task(self):
directory_file, _ = QFileDialog.getOpenFileName(None, ".", "*.txt")
if not directory_file:
return
# открыть файл ------------------> v <---- в текстовом режиме
with open(directory_file, "r") as f:
lines = f.readlines()
for line in lines:
decrypted = rsa.decrypt(base64.b64decode(line.strip()), self.key_priv)
print(decrypted.decode('utf8'))
print(f'\n -=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \n') #
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
app.setStyle("Fusion")
sys.exit(app.exec_())
Я предоставил вам один из возможных вариантов как можно кодировать и декодировать эти данные.
Вы ничего не написали подходит вам такой вариант или нет,
а лишь, в комментариях, по сути задали новый вопрос.
Этот новый вопрос о том, каков порядок создания, сохранения и выдачи публичных и секретных ключей шифрования.
Я посмотрел какие функции библиотеки rsa могут вам помочь.
Я отметил для вас изменения, которые внес в программу.
Обратите внимание:
я добавил кнопку
btn_generate_keys, по клику на которую выполнится методfunc_generate_keys, в котором будут сформированыпара ключейи каждый ключ записывается в соответствующий файл "key_pub.pem" и "key_priv.pem".
Вообще-то эта операция по формированию ключей должна быть в отдельном приложении и выполняться отдельным уполномоченным за эту операцию лицом.
После файл с нужным ключом передается/устанавливается определенному участнику процесса.
Один участник должен иметь доступ к одному файлу с ключом.По-хорошему эту операцию по созданию ключей вам надо выполнить один раз.
Если какой-то из ключей был скомпрометирован, то ключи надо создать новые и раздать участникам процесса.
При этом вы должны понимать, что новым ключом невозможно декодировать данные, которые были зашифрованы старым ключом.
import os # !!! +++
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
import rsa
import base64
#from crypto import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 514)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_3)
self.gridLayout_2.setObjectName("gridLayout_2")
self.groupBox = QtWidgets.QGroupBox(self.tab_3)
self.groupBox.setObjectName("groupBox")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
self.gridLayout_4.setObjectName("gridLayout_4")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.lineEdit_7 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_7.setObjectName("lineEdit_7")
self.gridLayout_3.addWidget(self.lineEdit_7, 6, 1, 1, 1)
self.lineEdit_8 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_8.setObjectName("lineEdit_8")
self.gridLayout_3.addWidget(self.lineEdit_8, 7, 1, 1, 1)
self.lineEdit_9 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_9.setObjectName("lineEdit_9")
self.gridLayout_3.addWidget(self.lineEdit_9, 8, 1, 1, 1)
self.lineEdit_11 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_11.setObjectName("lineEdit_11")
self.gridLayout_3.addWidget(self.lineEdit_11, 10, 1, 1, 1)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_3.setObjectName("lineEdit_3")
self.gridLayout_3.addWidget(self.lineEdit_3, 2, 1, 1, 1)
self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_5.setObjectName("lineEdit_5")
self.gridLayout_3.addWidget(self.lineEdit_5, 4, 1, 1, 1)
self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_4.setObjectName("lineEdit_4")
self.gridLayout_3.addWidget(self.lineEdit_4, 3, 1, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_3.addWidget(self.lineEdit_2, 1, 1, 1, 1)
self.lineEdit_6 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_6.setObjectName("lineEdit_6")
self.gridLayout_3.addWidget(self.lineEdit_6, 5, 1, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout_3.addWidget(self.lineEdit, 0, 1, 1, 1)
self.lineEdit_10 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_10.setObjectName("lineEdit_10")
self.gridLayout_3.addWidget(self.lineEdit_10, 9, 1, 1, 1)
self.lineEdit_12 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_12.setObjectName("lineEdit_12")
self.gridLayout_3.addWidget(self.lineEdit_12, 11, 1, 1, 1)
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setObjectName("label")
self.gridLayout_3.addWidget(self.label, 0, 0, 1, 1)
self.label_2 = QtWidgets.QLabel(self.groupBox)
self.label_2.setObjectName("label_2")
self.gridLayout_3.addWidget(self.label_2, 1, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.groupBox)
self.label_3.setObjectName("label_3")
self.gridLayout_3.addWidget(self.label_3, 2, 0, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox)
self.label_4.setObjectName("label_4")
self.gridLayout_3.addWidget(self.label_4, 3, 0, 1, 1)
self.label_5 = QtWidgets.QLabel(self.groupBox)
self.label_5.setObjectName("label_5")
self.gridLayout_3.addWidget(self.label_5, 4, 0, 1, 1)
self.label_6 = QtWidgets.QLabel(self.groupBox)
self.label_6.setObjectName("label_6")
self.gridLayout_3.addWidget(self.label_6, 5, 0, 1, 1)
self.label_7 = QtWidgets.QLabel(self.groupBox)
self.label_7.setObjectName("label_7")
self.gridLayout_3.addWidget(self.label_7, 6, 0, 1, 1)
self.label_8 = QtWidgets.QLabel(self.groupBox)
self.label_8.setObjectName("label_8")
self.gridLayout_3.addWidget(self.label_8, 7, 0, 1, 1)
self.label_9 = QtWidgets.QLabel(self.groupBox)
self.label_9.setObjectName("label_9")
self.gridLayout_3.addWidget(self.label_9, 8, 0, 1, 1)
self.label_10 = QtWidgets.QLabel(self.groupBox)
self.label_10.setObjectName("label_10")
self.gridLayout_3.addWidget(self.label_10, 9, 0, 1, 1)
self.label_11 = QtWidgets.QLabel(self.groupBox)
self.label_11.setObjectName("label_11")
self.gridLayout_3.addWidget(self.label_11, 10, 0, 1, 1)
self.label_12 = QtWidgets.QLabel(self.groupBox)
self.label_12.setObjectName("label_12")
self.gridLayout_3.addWidget(self.label_12, 11, 0, 1, 1)
self.gridLayout_4.addLayout(self.gridLayout_3, 0, 0, 1, 1)
self.groupBox_2 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_2.setObjectName("groupBox_2")
self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2)
self.gridLayout_5.setObjectName("gridLayout_5")
self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_3.setObjectName("pushButton_3")
self.gridLayout_5.addWidget(self.pushButton_3, 7, 0, 1, 2)
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout_5.addWidget(self.pushButton_2, 6, 0, 1, 2)
self.label_19 = QtWidgets.QLabel(self.groupBox_2)
self.label_19.setObjectName("label_19")
self.gridLayout_5.addWidget(self.label_19, 4, 0, 1, 1)
self.lineEdit_14 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_14.setObjectName("lineEdit_14")
self.gridLayout_5.addWidget(self.lineEdit_14, 1, 1, 1, 1)
self.lineEdit_17 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_17.setObjectName("lineEdit_17")
self.gridLayout_5.addWidget(self.lineEdit_17, 4, 1, 1, 1)
self.label_14 = QtWidgets.QLabel(self.groupBox_2)
self.label_14.setObjectName("label_14")
self.gridLayout_5.addWidget(self.label_14, 1, 0, 1, 1)
self.label_15 = QtWidgets.QLabel(self.groupBox_2)
self.label_15.setObjectName("label_15")
self.gridLayout_5.addWidget(self.label_15, 5, 0, 1, 1)
self.comboBox = QtWidgets.QComboBox(self.groupBox_2)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.gridLayout_5.addWidget(self.comboBox, 5, 1, 1, 1)
self.lineEdit_15 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_15.setObjectName("lineEdit_15")
self.gridLayout_5.addWidget(self.lineEdit_15, 2, 1, 1, 1)
self.label_16 = QtWidgets.QLabel(self.groupBox_2)
self.label_16.setObjectName("label_16")
self.gridLayout_5.addWidget(self.label_16, 2, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton.setObjectName("pushButton")
self.gridLayout_5.addWidget(self.pushButton, 9, 0, 1, 2)
self.lineEdit_16 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_16.setObjectName("lineEdit_16")
self.gridLayout_5.addWidget(self.lineEdit_16, 3, 1, 1, 1)
self.label_18 = QtWidgets.QLabel(self.groupBox_2)
self.label_18.setObjectName("label_18")
self.gridLayout_5.addWidget(self.label_18, 3, 0, 1, 1)
self.label_13 = QtWidgets.QLabel(self.groupBox_2)
self.label_13.setObjectName("label_13")
self.gridLayout_5.addWidget(self.label_13, 0, 0, 1, 1)
self.lineEdit_13 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_13.setObjectName("lineEdit_13")
self.gridLayout_5.addWidget(self.lineEdit_13, 0, 1, 1, 1)
self.gridLayout_4.addWidget(self.groupBox_2, 0, 1, 1, 1)
self.gridLayout_2.addWidget(self.groupBox, 0, 0, 1, 1)
self.tabWidget.addTab(self.tab_3, "")
self.tab_5 = QtWidgets.QWidget()
self.tab_5.setObjectName("tab_5")
self.tabWidget.addTab(self.tab_5, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.tabWidget.addTab(self.tab_4, "")
self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 1)
self.label_17 = QtWidgets.QLabel(self.centralwidget)
self.label_17.setObjectName("label_17")
self.gridLayout.addWidget(self.label_17, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.tabWidget.setToolTip(_translate("MainWindow", "<html><head/><body><p>Дешифрование файлов</p></body></html>"))
self.tabWidget.setWhatsThis(_translate("MainWindow", "<html><head/><body><p>Дешифрование</p></body></html>"))
self.groupBox.setTitle(_translate("MainWindow", "Ответы на задания ОГЭ с КРАТКИМ ОТВЕТОМ (проверка/настройка ключей с ответами)"))
self.label.setText(_translate("MainWindow", "Ответ на задание №1"))
self.label_2.setText(_translate("MainWindow", "Ответ на задание №2"))
self.label_3.setText(_translate("MainWindow", "Ответ на задание №3"))
self.label_4.setText(_translate("MainWindow", "Ответ на задание №4"))
self.label_5.setText(_translate("MainWindow", "Ответ на задание №5"))
self.label_6.setText(_translate("MainWindow", "Ответ на задание №6"))
self.label_7.setText(_translate("MainWindow", "Ответ на задание №7"))
self.label_8.setText(_translate("MainWindow", "Ответ на задание №8"))
self.label_9.setText(_translate("MainWindow", "Ответ на задание №9"))
self.label_10.setText(_translate("MainWindow", "Ответ на задание №10"))
self.label_11.setText(_translate("MainWindow", "Ответ на задание №11"))
self.label_12.setText(_translate("MainWindow", "Ответ на задание №12"))
self.groupBox_2.setTitle(_translate("MainWindow", "Общие настройки"))
self.pushButton_3.setText(_translate("MainWindow", "Загрузить ключ с ответами"))
self.pushButton_2.setText(_translate("MainWindow", "Сохранить данные"))
self.label_19.setText(_translate("MainWindow", "Имя файла с ключем ответа"))
self.label_14.setText(_translate("MainWindow", "Директория файлов для \n"
"проверки"))
self.label_15.setText(_translate("MainWindow", "Вывод данных в файл типа"))
self.comboBox.setItemText(0, _translate("MainWindow", ".txt"))
self.comboBox.setItemText(1, _translate("MainWindow", ".csv"))
self.comboBox.setItemText(2, _translate("MainWindow", ".docx"))
self.label_16.setText(_translate("MainWindow", "<html><head/><body><p>Директория сохранения </p><p>проверенных файлов</p></body></html>"))
self.pushButton.setText(_translate("MainWindow", "Дешифровать файлы"))
self.label_18.setText(_translate("MainWindow", "<html><head/><body><p>Директория файлов с </p><p>ключем ответов</p></body></html>"))
self.label_13.setText(_translate("MainWindow", "Ключ шифрования данных"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Дешифровка"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("MainWindow", "Настройка заданий"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "Статистика"))
self.label_17.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-weight:600;\">ВНИМАНИЕ! ДАННАЯ ВЕРСИЯ ПРОГРАММА НАХОДИТСЯ В БЕТА ВЕРСИИ, В НЕЙ МОГУТ ПРИСУДСТВОВАТЬ</span></p><p><span style=\" font-weight:600;\">НЕ РАБОЧИЕ ФУНКЦИИ. ПОЛЬЗУЯСЬ ПРОГРАММОЙ ВЫ СОГЛАШАЕТЕСЬ С ПРАВИЛАМИ ЕЁ ИСПОЛЬЗОВАНИЯ. </span></p><p>(c)Copyrigth by Alexandrov Andrey </p></body></html>"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("Automatic OGE verification system ver.00.04.75")
# !!! +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
# !!! эта кнопка должна быть доступна только администратору, ответственному за генерацию ключей
self.btn_generate_keys = QtWidgets.QPushButton('Сгенерировать ключи', self.groupBox_2)
self.btn_generate_keys.setObjectName("btn_generate_keys")
self.btn_generate_keys.clicked.connect(self.func_generate_keys)
self.gridLayout_5.addWidget(self.btn_generate_keys, 10, 0, 1, 2)
# !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(self.key_pub, self.key_priv) = rsa.newkeys(512)
#print(f'\n{type(self.key_pub)} = \n{self.key_pub}') # <class 'rsa.key.PublicKey'>
#print(f'\n{type(self.key_priv)} = \n{self.key_priv}') # <class 'rsa.key.PrivateKey'>
self.pushButton_2.clicked.connect(self.information)
self.pushButton_3.clicked.connect(self.app_key_task)
# добавил для тестирования
self.lineEdit.setText('hello')
self.lineEdit_2.setText('привет')
self.lineEdit_13.setText('12345')
self.lineEdit_17.setText('1111')
def information(self):
# !!! +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
if not os.path.exists('key_pub.pem'):
msg = QtWidgets.QMessageBox.information(self, 'Внимание', 'Не обнаружен "key_pub.pem"')
return
with open('key_pub.pem', "rb") as f:
_key_pub = f.read()
key_pub = self.key_pub.load_pkcs1(_key_pub) # !!! <---- key_pub
# !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.key_crypto = self.lineEdit_13.text()
self.directory_file_ver = self.lineEdit_14.text()
self.directory_save = self.lineEdit_15.text()
self.directory_key = self.lineEdit_16.text()
self.name_key = self.lineEdit_17.text()
self.key_task(key_pub)
def key_task(self, key_pub):
self.number_1 = self.lineEdit.text()
self.number_2 = self.lineEdit_2.text()
self.number_3 = self.lineEdit_3.text()
self.number_4 = self.lineEdit_4.text()
self.number_5 = self.lineEdit_5.text()
self.number_6 = self.lineEdit_6.text()
self.number_7 = self.lineEdit_7.text()
self.number_8 = self.lineEdit_8.text()
self.number_9 = self.lineEdit_9.text()
self.number_10 = self.lineEdit_10.text()
self.number_11 = self.lineEdit_11.text()
self.number_12 = self.lineEdit_12.text()
self.key_task_crypto(key_pub)
def key_task_crypto(self, key_pub):
# !!! self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), self.key_pub)
self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), key_pub)
# !!! v^v^v^v <---- key_pub
self.number_2_crypto = rsa.encrypt(self.number_2.encode('utf8'), key_pub)
self.number_3_crypto = rsa.encrypt(self.number_3.encode('utf8'), key_pub)
self.number_4_crypto = rsa.encrypt(self.number_4.encode('utf8'), key_pub)
self.number_5_crypto = rsa.encrypt(self.number_5.encode('utf8'), key_pub)
self.number_6_crypto = rsa.encrypt(self.number_6.encode('utf8'), key_pub)
self.number_7_crypto = rsa.encrypt(self.number_7.encode('utf8'), key_pub)
self.number_8_crypto = rsa.encrypt(self.number_8.encode('utf8'), key_pub)
self.number_9_crypto = rsa.encrypt(self.number_9.encode('utf8'), key_pub)
self.number_10_crypto = rsa.encrypt(self.number_10.encode('utf8'), key_pub)
self.number_11_crypto = rsa.encrypt(self.number_11.encode('utf8'), key_pub)
self.number_12_crypto = rsa.encrypt(self.number_12.encode('utf8'), key_pub)
self.key_crypto = rsa.encrypt(self.key_crypto.encode('utf8'), key_pub)
self.load_key_task_crypto()
def load_key_task_crypto(self):
k = [self.number_1_crypto, self.number_2_crypto, self.number_3_crypto, self.number_4_crypto,
self.number_5_crypto, self.number_6_crypto, self.number_7_crypto, self.number_8_crypto,
self.number_9_crypto, self.number_10_crypto, self.number_11_crypto, self.number_12_crypto,
self.key_crypto]
# k - список <class 'bytes'>.
# чтобы записать элемент данного списка в файл,
# надо указать, режим открытия файла в двоичном режиме - "wb".
# print(f'\n{type(self.number_1_crypto)}; \n{self.number_1_crypto}\n') #
directory_save_key = self.directory_key + self.name_key + ".txt"
# открыть ф. в текст.режиме -> v
with open(directory_save_key, "w") as f:
# --------------> vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv <---- это строка
f.write("\n".join(base64.b64encode(item).decode('utf8') for item in k))
msg = QtWidgets.QMessageBox.information(
self, 'Успех',
'Данные сохранены.'
)
def app_key_task(self):
# !!! +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
if not os.path.exists('key_priv.pem'):
msg = QtWidgets.QMessageBox.information(self, 'Внимание', 'Не обнаружен "key_priv.pem"')
return
with open('key_priv.pem', "rb") as f:
_key_priv = f.read()
key_priv = self.key_priv.load_pkcs1(_key_priv)
# !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
directory_file, _ = QFileDialog.getOpenFileName(None, ".", "*.txt")
if not directory_file:
return
# открыть файл ----------> v <---- в текстовом режиме
with open(directory_file, "r") as f:
lines = f.readlines()
for line in lines:
# !!! --- decrypted = rsa.decrypt(base64.b64decode(line.strip()), self.key_priv)
decrypted = rsa.decrypt(base64.b64decode(line.strip()), key_priv) # !!! +++
print(decrypted.decode('utf8'))
print(f'\n -=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \n') #
# !!! +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def func_generate_keys(self):
# !!! +++ тут надо сделать запрос-уточнение о серьезности намерений выполнить эти действия # !!! +++
save_key_pub = self.key_pub.save_pkcs1()
with open('key_pub.pem', "wb") as f:
f.write(save_key_pub)
save_key_priv = self.key_priv.save_pkcs1()
with open('key_priv.pem', "wb") as f:
f.write(save_key_priv)
msg = QtWidgets.QMessageBox.information(
self,
'Успех',
'<p style="color: #02475E; text-align: center;"> Файлы ключей <br>'
'"key_pub.pem" и "key_priv.pem" <br>сформированы. <br>'
'Передайте нужные ключи участникам соревнований :)<\p>'
)
qss = '''
QMessageBox {
background: #F8F5F1;
}
QMessageBox QLabel {
color: #02475E;
text-align: center;
font-size: 15px;
}
QMessageBox::title {
background-color: #00f;
text-align: center;
height: 12px;
color: white;
}
'''
# !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
app.setStyleSheet(qss) # +++
w = MainWindow()
w.show()
sys.exit(app.exec_())






