Ошибка при проверке RSA-подписи

При проверке подписи мне выводит ошибку:No PEM start marker "b'-----BEGIN RSA PUBLIC KEY-----'" found, с чем она связана и как её исправить?
Я разрабатываю приложение на PyQT5, в данном окне приложения можно подписать документ и проверить подпись:

class MainWindow(QDialog):
def __init__(self):
    super().__init__()
    self.public_key_path = "public_key.pem"

    self.init_ui()

def init_ui(self):
    layout = QVBoxLayout()
    self.setGeometry(100, 100, 600, 400)

    sign_button = QPushButton('Подписать документ', self)
    verify_button = QPushButton('Проверить подпись', self)

    sign_button.clicked.connect(self.sign_document)
    verify_button.clicked.connect(self.check_signature)

    layout.addWidget(sign_button)
    layout.addWidget(verify_button)

    self.setLayout(layout)

def generate_key_pair(self):
    public_key, private_key = rsa.newkeys(2048)

    with open('private_key.pem', 'wb') as f:
        f.write(private_key.save_pkcs1())

    with open('public_key.pem', 'wb') as f:
        f.write(public_key.save_pkcs1())

    return public_key

def sign_document(self):
    file_dialog = QFileDialog(self)
    file_path, _ = file_dialog.getOpenFileName()
    if file_path:
        try:
            self.generate_key_pair()

            with open(file_path, 'rb') as doc_file:
                document_data = doc_file.read()
                private_key_path = "private_key.pem"
                signature_output_file = "signed_data.txt"
                self.sign_and_save_data(document_data, private_key_path, signature_output_file)

            QMessageBox.information(self, 'Успех', 'Документ подписан успешно')
        except Exception as e:
            QMessageBox.warning(self, 'Ошибка', f'Ошибка в подписи документов: {e}')

def sign_and_save_data(self, data, private_key_path, save_file):
    with open(private_key_path, "rb") as key_file:
        private_key = rsa.PrivateKey.load_pkcs1(key_file.read())

    hashed_data = rsa.compute_hash(data, 'SHA-256')
    signature = rsa.sign(hashed_data, private_key, 'SHA-256')

    with open(save_file, 'wb') as f:
        f.write(signature)
        f.write(b'\n')
        f.write(private_key.save_pkcs1())

def check_signature(self):
    document_path, _ = QFileDialog.getOpenFileName(None, 'Выберите документ', '', 'All Files (*)')
    if not document_path:
        return

    try:
        with open(document_path, 'rb') as file:
            document_content = file.read()

        signature_path, _ = QFileDialog.getOpenFileName(None, 'Выберите подпись', '', 'All Files (*)')
        if not signature_path:
            return

        with open(signature_path, 'rb') as file:
            signature = file.read()
            public_key = rsa.PublicKey.load_pkcs1(signature.replace(b'\n', b''))  # Извлекаем открытый ключ из файла с подписью

        hashed_data = rsa.compute_hash(document_content, 'SHA-256')
        rsa.verify(hashed_data, signature, public_key)
        QMessageBox.information(None, 'Результат проверки', 'Подпись и данные действительны')
    except rsa.pkcs1.VerificationError:
        QMessageBox.critical(None, 'Результат проверки', 'Подпись или данные недействительны')
    except Exception as e:
        QMessageBox.critical(None, 'Ошибка', f'Произошла ошибка при проверке подписи: {e}')

Документ подписывает без ошибок, а вот при при проверке выводит ошибку: No PEM start marker "b'-----BEGIN RSA PUBLIC KEY-----'", никак не могу понять: как её исправить и из-за чего вообще она происходит.


Ответы (0 шт):