Andrei Yankovich
Andrei Yankovich14. Juni 2019 06:10

Datenverschlüsselung durch RSA-Algorithmus in Qt mit öffentlichen und privaten Schlüsseln ohne Bindung an OpenSSL

Einführung

Dieser Artikel bietet eine Möglichkeit, die Nachrichtenverschlüsselung zu organisieren und RSA-Algorithmen (öffentliche und private Schlüssel) ohne Bibliotheken wie OpenSSL, QCA oder LibSodium zu verwenden.


Wie es funktioniert?

Warum wird das benötigt?

Es gibt viele Verschlüsselungsalgorithmen, von denen die meisten auf der Idee basieren, dass die Nachricht, die Sie erhalten, einen Schlüssel hat, um Ihre Nachricht zu verschlüsseln und an den Empfänger zu senden. Es wird davon ausgegangen, dass der Empfänger den Verschlüsselungsschlüssel bereits erhalten hat, sodass der Empfänger ihn entschlüsseln kann. Diese Methode sollte jedoch niemals verwendet werden, da der Verschlüsselungsschlüssel irgendwie gesendet werden muss, damit ihn niemand abfangen kann, was fast unmöglich ist.

Aus diesem Grund ist das RSA-Verschlüsselungsverfahren mit öffentlichem und privatem Schlüssel (asynchrone Verschlüsselung) mittlerweile das zuverlässigste und beliebteste.

Das Funktionsprinzip ist wie folgt:
Als Beispiel verwenden wir die bereits etablierten Namen von Verschlüsselungsteilnehmern: Alice und Bob.
Angenommen, Alice möchte Bob eine geheime Nachricht senden, möchte aber nicht, dass jemand anderes sie sieht.

  • Bob erstellt zwei Schlüssel für diese Operation: öffentlich und privat.

  • Bob sendet den öffentlichen Schlüssel an Alice.

  • Alice verschlüsselt die Nachricht mit Bobs öffentlichem Schlüssel.

  • Alice sendet eine verschlüsselte Nachricht an Bob.

  • Bob entschlüsselt Alices Nachricht mit dem privaten Schlüssel.

Eve, die wissen will, wie Alice und Bob korrespondieren, fängt alle ihre Nachrichten ab. Sie kann damit nichts anfangen, weil sie ihre privaten Schlüssel nicht hat, da im RSA-Algorithmus eine verschlüsselte Nachricht mit Schlüssel A (öffentlicher Schlüssel) nur durch ihr A1-Paar (privater Schlüssel) entschlüsselt werden kann.
So können Sie wichtige Informationen einfach und bequem schützen.

Beschreibung.

Qt-Secret ist eine einfache Bibliothek, die von der QuasarApp-Gruppe auf Qt/qmake erstellt wurde, der Zweck ist um grundlegende Verschlüsselungsfunktionen bereitzustellen, die in nativem Qt nicht zu finden sind. Nämlich: RSA- und AES-Algorithmen.

Hauptmerkmal:

  • Generierung von RSA64- und RSA128-Schlüsselpaaren (Unterstützung von bis zu RSA2048-Nummern erwartet)
  • RSA-Verschlüsselung und -Entschlüsselung.
  • Signatur- und Nachrichtenauthentifizierung.
  • AES-Schlüsselgenerierung (AES64, AES128, AES256)
  • AES-Verschlüsselung und -Entschlüsselung

Arbeiten mit Qt-Secret

Erstellen Sie die Bibliothek und fügen Sie sie mit qmake zum Projekt hinzu

  • Öffnen Sie Ihr Repository
    cd yourRepo

    *Fügen Sie Qt-Secret wie ein Submodul zu Ihrem Repository hinzu
    The git add submodule https://github.com/QuasarApp/Qt-Secret.git
  • Aktualisieren Sie Ihre Submodule

    git submodule update --init --recursive

  • Fügen Sie Ihre Qt-Secret „pri“-Bibliotheksdatei zu Ihrer „pro“-Datei hinzu.

    include ($$PWD/Qt-Secret/src/Qt-Secret.pri)

  • Erstellen Sie das Projekt neu

Die Bibliothek wurde Ihrem Projekt hinzugefügt, jetzt können Sie sie verwenden.

Anwendungsbeispiel

Nachrichten verschlüsseln und entschlüsseln.
#include <qrsaencryption.h> // Include the Qt-Secret library (RSA)

QByteArray pub, priv; // Create variables to keys.
QRSAEncryption e; // Create a variable to cryptographer

// Generate a pair of keys with a bit depth of 128
e.generatePairKey (pub, priv, QRSAEncryption :: Rsa :: RSA_128); // or QRSAEncryption :: Rsa :: RSA_64
QByteArray msg = "test message";


auto encodeData = e.encode (msg, pub); // encrypt the message with the public key
auto decodeData = e.decode (encodeData, priv); // decrypt with the private key

qDebug () << decodeData; // check in the message.



Signieren und Überprüfen der Nachrichtensignatur.
#include <qrsaencryption.h>

// Initialization
QByteArray pub, priv;
QRSAEncryption e;
e.generatePairKey (pub, priv, QRSAEncryption :: Rsa :: RSA_128); // or QRSAEncryption :: Rsa :: RSA_64

QByteArray msg = "test message";

auto signatureMessage = e.signMessage (msg, priv); // sign the message

if (e.checkSignMessage (signatureMessage, pub)) {// check the signature
// message signed successfully
}

Fazit

Diese Bibliothek ist eine gute Lösung für einfache Verschlüsselungsaufgaben.

  • einfach einzuschalten;
  • Einfach zu verwenden.

Es ist gut, ein Schlüsselpaar für eine Sitzung zu verwenden.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

D
  • 16. Januar 2020 12:06

Доброго времени суток, не подскажите, что делать в данной ситуации, после того, как я сделал все вышеуказанные инструкции для подключения библиотеки к проекту?

Andrei Yankovich
  • 17. Januar 2020 02:31

Выглядит как ошибка библиотеки. Расскажите подробно на какой платформе вы собираете проект (MinGW или MSVC) их версии и версии Qt.

Дмитрий
  • 21. April 2020 05:15

Та же самая ошибка. MinGW, Qt 5.14.2

Andrei Yankovich
  • 20. Mai 2020 08:39

Для тех у кого возникает ошибка cannot find -lQt-Secret1, cannot find -lQtBigInt6
Решение и описание проблеммы здесь

ИБ
  • 11. November 2020 08:41

Библиотека подключилась нормально, только на выводе из первого примера выходит пустое сообщение, вместо "test message" просто "". Никаких ошибок не выдает.

Q
  • 16. Juli 2021 06:28

Возможно ли с помощью этой библиотеки шифровать файлы, а не обычные строки?

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken