Не получается загрузить ключ RSA
Я сохранил ключ в файле с расширением .PEM и пытаюсь его загрузить, но при попытке это сделать появляется ошибка:
Traceback (most recent call last):
File "crypto_log.py", line 110, in app_key_task
decrypted = rsa.decrypt(base64.b64decode(line.strip()), key_priv)
File "G:\PyCharm\Python_x32\Python_3_8_10\lib\base64.py", line 87, in b64decode
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
Как это решить?
main.py
from PyQt5 import QtCore, QtGui, QtWidgets
from oge import Ui_MainWindow
from PyQt5.QtGui import QPixmap, QTransform
from PyQt5.QtWidgets import *
import rsa
from datetime import datetime, timedelta
import time
import base64
import os
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_priv = None
# self.pub_key = None
self.key_pub, self.key_priv = rsa.newkeys(512) # !!! +++
self.pushButton.clicked.connect(self.app_key_task)
def app_key_task(self):
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)
self.information()
def time(self):
beg = datetime.strptime(str('01:59:59'), '%H:%M:%S')
end = datetime.strptime(str('00:00:00'), '%H:%M:%S')
step = timedelta(seconds=1)
while beg != end:
beg = beg - step
print(str(beg).split()[1])
self.lable_55.setText(str(beg).split()[1])
time.sleep(1)
def information(self):
self.dd_mm_yy = self.lineEdit_6.text()
self.region = self.lineEdit_7.text()
self.code_eo = self.lineEdit_8.text()
self.number_class = self.lineEdit_9.text()
self.letter_class = self.lineEdit_13.text()
self.code_location_event = self.lineEdit_14.text()
self.number_auditorium = self.lineEdit_15.text()
self.number_option = self.lineEdit_16.text()
self.code_subject = self.lineEdit_17.text()
self.item_name = self.lineEdit_18.text()
self.number_kim = self.lineEdit_19.text()
self.surname = self.lineEdit.text()
self.name = self.lineEdit_2.text()
self.patronymic = self.lineEdit_3.text()
self.ser_passport = self.lineEdit_5.text()
self.number_passport = self.lineEdit_4.text()
self.number_1 = self.lineEdit_20.text()
self.number_2 = self.lineEdit_22.text()
self.number_3 = self.lineEdit_21.text()
self.number_4 = self.lineEdit_23.text()
self.number_5 = self.lineEdit_24.text()
self.number_6 = self.lineEdit_25.text()
self.number_7 = self.lineEdit_26.text()
self.number_8 = self.lineEdit_27.text()
self.number_9 = self.lineEdit_28.text()
self.number_10 = self.lineEdit_29.text()
self.number_11 = self.lineEdit_30.text()
self.number_12 = self.lineEdit_31.text()
self.crypto_information()
def crypto_information(self):
self.dd_mm_yy_crypto = rsa.encrypt(self.dd_mm_yy.encode('utf8'), self.key_pub)
self.region_crypto = rsa.encrypt(self.region.encode('utf8'), self.key_pub)
self.code_eo_crypto = rsa.encrypt(self.code_eo.encode('utf8'), self.key_pub)
self.number_class_crypto = rsa.encrypt(self.number_class.encode('utf8'), self.key_pub)
self.letter_class_crypto = rsa.encrypt(self.letter_class.encode('utf8'), self.key_pub)
self.code_location_event_crypto = rsa.encrypt(self.code_location_event.encode('utf8'), self.key_pub)
self.number_auditorium_crypto = rsa.encrypt(self.number_auditorium.encode('utf8'), self.key_pub)
self.number_option_crypto = rsa.encrypt(self.number_option.encode('utf8'), self.key_pub)
self.code_subject_crypto = rsa.encrypt(self.code_subject.encode('utf8'), self.key_pub)
self.item_name_crypto = rsa.encrypt(self.item_name.encode('utf8'), self.key_pub)
self.number_kim_crypto = rsa.encrypt(self.number_kim.encode('utf8'), self.key_pub)
self.surname_crypto = rsa.encrypt(self.surname.encode('utf8'), self.key_pub)
self.name_crypto = rsa.encrypt(self.name.encode('utf8'), self.key_pub)
self.patronymic_crypto = rsa.encrypt(self.patronymic.encode('utf8'), self.key_pub)
self.ser_passport_crypto = rsa.encrypt(self.ser_passport.encode('utf8'), self.key_pub)
self.number_passport_crypto = rsa.encrypt(self.number_passport.encode('utf8'), self.key_pub)
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_information()
#
def load_information(self):
k = [self.dd_mm_yy_crypto, self.region_crypto, self.code_eo_crypto, self.number_class_crypto,
self.letter_class_crypto,
self.code_location_event_crypto, self.number_auditorium_crypto, self.number_option_crypto,
self.code_subject_crypto,
self.item_name_crypto, self.number_kim_crypto, self.surname_crypto, self.name_crypto,
self.patronymic_crypto,
self.ser_passport_crypto, self.number_passport_crypto, 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]
with open("TEST.txt", "w") as f:
f.write("\n".join(str(item) for item in k))
def key_date(self):
self.key = self.dialog.lineEdit.text()
self.key_check()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
w = MainWindow()
w.resize(675, 598)
w.show()
sys.exit(app.exec_())
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QtWidgets.QWidget(self)
self.centralWidget.setObjectName("centralWidget")
self.setCentralWidget(self.centralWidget)
self.layout = QtWidgets.QFormLayout(self.centralWidget)
self.label = QtWidgets.QLabel('Hello World', alignment=QtCore.Qt.AlignCenter)
self.layout.addRow('', self.label)
for i in range(6):
name = f"lineEdit_{i + 1}"
lineEdit = QtWidgets.QLineEdit(placeholderText="Введите что-нибудь...")
lineEdit.setObjectName(name)
self.layout.addRow(name, lineEdit)
self.pushButton = QtWidgets.QPushButton('Проверить заполнение lineEdits')
self.pushButton.clicked.connect(self.button_clicked)
self.layout.addRow('', self.pushButton)
def button_clicked(self):
lineEdits = self.findChildren(QLineEdit)
text = ''
for lineEdit in lineEdits:
if not lineEdit.text():
print(f'Заполните {lineEdit.objectName()}')
text = f'{text}Заполните {lineEdit.objectName()}\n'
if text:
msg = QtWidgets.QMessageBox.information(
self, 'Внимание', text)
else:
msg = QtWidgets.QMessageBox.information(
self, 'Информация', 'Все lineEdits заполнены.')
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.resize(300, 400)
w.show()
sys.exit(app.exec_())
Интерфейс: https://drive.google.com/file/d/1mXfYQKxhX2k2wxNmUs896TTDOn1q5foM/view?usp=sharing
Update:
Для получение данной ошибки необходимо пролистать вниз интерфейса и нажать на кнопку "Завершить работу"
Ответы (1 шт):
Вы не пишите какие надо выполнить действия чтобы получить ошибку?
Пока, из того что я вижу, мне не нравится две строк:
self.key_priv = None
self.pub_key = None
попробуйте заменить их на:
self.key_pub, self.key_priv = rsa.newkeys(512)
Update
это не совсем то, что мне нужно. Я хочу загрузить публичный и приватный ключ для шифрование данных, что бы позже через другую программу (была представлена в прошлом вопросе) их расшифровывать. –
я учёл ваше замечание и исправил программу, но это не помогло, ключи просто генерировались, а не загпужались из файлов.
Вы точно тестируетесь на коде, который вы предоставили как пример?
Вот смотрите, я внес изменение, о которых писал выше и все работает.
Файлы key_priv.pem и 1111.txt у меня остались после запуска примера, который я вам предоставил как ответ на предыдущий вопрос.
Если у вас возникают другие проблемы - задайте новый вопрос.
from PyQt5 import QtCore, QtGui, QtWidgets
from oge import Ui_MainWindow
from PyQt5.QtGui import QPixmap, QTransform
from PyQt5.QtWidgets import *
import rsa
from datetime import datetime, timedelta
import time
import base64
import os
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_priv = None
# self.pub_key = None
self.key_pub, self.key_priv = rsa.newkeys(512) # !!! +++
self.pushButton.clicked.connect(self.app_key_task)
def app_key_task(self):
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)
print(f'\n{key_priv}\n') #
directory_file, _ = QFileDialog.getOpenFileName(None, ".", "*.txt")
if not directory_file:
return
with open(directory_file, "r") as f:
lines = f.readlines()
for line in lines:
decrypted = rsa.decrypt(base64.b64decode(line.strip()), key_priv)
print(decrypted.decode('utf8'))
print(f'\n -=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \n')
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.information()
def time(self):
beg = datetime.strptime(str('01:59:59'), '%H:%M:%S')
end = datetime.strptime(str('00:00:00'), '%H:%M:%S')
step = timedelta(seconds=1)
while beg != end:
beg = beg - step
print(str(beg).split()[1])
self.lable_55.setText(str(beg).split()[1])
time.sleep(1)
def information(self):
self.dd_mm_yy = self.lineEdit_6.text()
self.region = self.lineEdit_7.text()
self.code_eo = self.lineEdit_8.text()
self.number_class = self.lineEdit_9.text()
self.letter_class = self.lineEdit_13.text()
self.code_location_event = self.lineEdit_14.text()
self.number_auditorium = self.lineEdit_15.text()
self.number_option = self.lineEdit_16.text()
self.code_subject = self.lineEdit_17.text()
self.item_name = self.lineEdit_18.text()
self.number_kim = self.lineEdit_19.text()
self.surname = self.lineEdit.text()
self.name = self.lineEdit_2.text()
self.patronymic = self.lineEdit_3.text()
self.ser_passport = self.lineEdit_5.text()
self.number_passport = self.lineEdit_4.text()
self.number_1 = self.lineEdit_20.text()
self.number_2 = self.lineEdit_22.text()
self.number_3 = self.lineEdit_21.text()
self.number_4 = self.lineEdit_23.text()
self.number_5 = self.lineEdit_24.text()
self.number_6 = self.lineEdit_25.text()
self.number_7 = self.lineEdit_26.text()
self.number_8 = self.lineEdit_27.text()
self.number_9 = self.lineEdit_28.text()
self.number_10 = self.lineEdit_29.text()
self.number_11 = self.lineEdit_30.text()
self.number_12 = self.lineEdit_31.text()
self.crypto_information()
def crypto_information(self):
self.dd_mm_yy_crypto = rsa.encrypt(self.dd_mm_yy.encode('utf8'), self.key_pub)
self.region_crypto = rsa.encrypt(self.region.encode('utf8'), self.key_pub)
self.code_eo_crypto = rsa.encrypt(self.code_eo.encode('utf8'), self.key_pub)
self.number_class_crypto = rsa.encrypt(self.number_class.encode('utf8'), self.key_pub)
self.letter_class_crypto = rsa.encrypt(self.letter_class.encode('utf8'), self.key_pub)
self.code_location_event_crypto = rsa.encrypt(self.code_location_event.encode('utf8'), self.key_pub)
self.number_auditorium_crypto = rsa.encrypt(self.number_auditorium.encode('utf8'), self.key_pub)
self.number_option_crypto = rsa.encrypt(self.number_option.encode('utf8'), self.key_pub)
self.code_subject_crypto = rsa.encrypt(self.code_subject.encode('utf8'), self.key_pub)
self.item_name_crypto = rsa.encrypt(self.item_name.encode('utf8'), self.key_pub)
self.number_kim_crypto = rsa.encrypt(self.number_kim.encode('utf8'), self.key_pub)
self.surname_crypto = rsa.encrypt(self.surname.encode('utf8'), self.key_pub)
self.name_crypto = rsa.encrypt(self.name.encode('utf8'), self.key_pub)
self.patronymic_crypto = rsa.encrypt(self.patronymic.encode('utf8'), self.key_pub)
self.ser_passport_crypto = rsa.encrypt(self.ser_passport.encode('utf8'), self.key_pub)
self.number_passport_crypto = rsa.encrypt(self.number_passport.encode('utf8'), self.key_pub)
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_information()
#
def load_information(self):
k = [self.dd_mm_yy_crypto, self.region_crypto, self.code_eo_crypto, self.number_class_crypto, self.letter_class_crypto,
self.code_location_event_crypto, self.number_auditorium_crypto, self.number_option_crypto, self.code_subject_crypto,
self.item_name_crypto, self.number_kim_crypto, self.surname_crypto, self.name_crypto, self.patronymic_crypto,
self.ser_passport_crypto, self.number_passport_crypto, 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]
with open("TEST.txt", "w") as f:
f.write("\n".join(str(item) for item in k))
def key_date(self):
self.key = self.dialog.lineEdit.text()
self.key_check()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
w = MainWindow()
w.resize(675, 598)
w.show()
sys.exit(app.exec_())
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QtWidgets.QWidget(self)
self.centralWidget.setObjectName("centralWidget")
self.setCentralWidget(self.centralWidget)
self.layout = QtWidgets.QFormLayout(self.centralWidget)
self.label = QtWidgets.QLabel('Hello World', alignment=QtCore.Qt.AlignCenter)
self.layout.addRow('', self.label)
for i in range(6):
name = f"lineEdit_{i+1}"
lineEdit = QtWidgets.QLineEdit(placeholderText="Введите что-нибудь...")
lineEdit.setObjectName(name)
self.layout.addRow(name, lineEdit)
self.pushButton = QtWidgets.QPushButton('Проверить заполнение lineEdits')
self.pushButton.clicked.connect(self.button_clicked)
self.layout.addRow('', self.pushButton)
def button_clicked(self):
lineEdits = self.findChildren(QLineEdit)
text = ''
for lineEdit in lineEdits:
if not lineEdit.text():
print(f'Заполните {lineEdit.objectName()}')
text = f'{text}Заполните {lineEdit.objectName()}\n'
if text:
msg = QtWidgets.QMessageBox.information(
self, 'Внимание', text)
else:
msg = QtWidgets.QMessageBox.information(
self, 'Информация', 'Все lineEdits заполнены.')
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.resize(300, 400)
w.show()
sys.exit(app.exec_())

