Andrej JankovichJune 14, 2019, 6:10 a.m.

Data encryption by RSA algorithm in Qt with public and private keys without binding to OpenSSL

Content

Introduction

In this article there is a way how to organize message encryption, as well as use RSA (public and private keys) algorithms without libraries similar to OpenSSL, QCA or LibSodium.

How does it work?

Why is it necessary?

There are many encryption algorithms, most of them are based on an idea that in a message you've got there is a key to encrypt your message and send it to the recipient. It is assumed that the recipient has already got the encryption key so the recipient can decrypt it. However this method isn't usable in any case , because the encryption key should somehow sent the way nobody can intercept it,but this is almost impossible.

That's why nowadays the RSA encryption method using public and private key (asynchronous encryption) has become the most reliable and popular.

The working principle is the following:
As an example, we use the already established names of encryption participants: Alice and Bob.
Suppose Alice wants to send Bob a secret message, but doesn't want anyone else to see it.

  • Bob creates two keys for this operation: public and private.

  • Bob sends the public key to Alice.

  • Alice encrypts the message with the Bob’s public key.

  • Alice sends the encrypted message to Bob.

  • Bob decrypts Alice's message with a private key.

Eve, who wants to find out what Alice and Bob correspond with, intercepts all their messages. She cannot do anything with them, because she hasn't got their private keys, since in the RSA algorithm the encrypted message with key A (public key) can be decrypted only by its A1 pair (private key).
Thus, you can easily and conveniently protect the important information.

Description.

Qt-Secret is a simple library created by the QuasarApp group on Qt / qmake, the goal is to provide Basic encryption opportunities, which lack in the native Qt. Namely: RSA and AES algorithms.

Key features:

  • Generation of RSA64 and RSA128 key pairs (it is supposed to support quantity of numbers up to RSA2048)
  • Encryption and Decryption RSA.
  • Signature and message authentication.
  • AES key generation (AES64, AES128, AES256)
  • Encryption and Decryption AES

Working with Qt-Secret

Build the library and add it in a project using qmake

  • Open your repository
    cd yourRepo
  • Add Qt-Secret in your repository, for example, a submodule
    The git add submodule https://github.com/QuasarApp/Qt-Secret.git
  • Update your submodules

    git submodule update --init --recursive

  • Add your "pri" Qt-Secret library file in your "pro" file.

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

  • Rebuild the project

The library is added in your project, now you can use it.

An example of using

Encrypting and decrypting messages.
#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.



Signature and verification of message signature.
#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
}

Conclusion

This library is a good solution for simple encryption tasks.

  • easy to include;
  • easy to use.

It's good to use a pair of keys for one working session.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
- company blog
D

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

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

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

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
VSh

C++ - Тест 003. Условия и циклы

  • Result:71points,
  • Rating points1
S
  • Sergej
  • Sept. 6, 2020, 1:50 a.m.

Qt - Test 001. Signals and slots

  • Result:100points,
  • Rating points10
S
  • Sergej
  • Sept. 6, 2020, 1:48 a.m.

Qt - Test 001. Signals and slots

  • Result:94points,
  • Rating points8
Last comments
VB

Qt/C++ - Lesson 004. QSqlTableModel – How to present the table from database?

Почему-то такой метод для обновления не работает, который можно было бы применить в данном примере. То есть в представлении данные удаляются и обновляются, а в базе данных изменений не происходи…
DI

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Кажется я понял в чем ошибка - я вручную создал таблицу Device в базе данных DataBase.db через DB Browser for SQLite в корне проекта с соответствующими типами данных и по какой-то причине insert…
DI

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Да, у меня тоже такая мысль возникла, но я просто скопипастил этот код из статьи, ничего в нем не меняя.

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Пока добавляли у себя код, что-то пробовали проверяли, могло дойти до ситуации, когда у вас получилась создана таблица, с количеством колонок, не совпадающим с количеством колонок в финальной ве…
DI

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Попробовал запустить код, описанный в данной статье, но получаю следующее: Подскажите в чем может быть проблема ? Вывод окна - пустой:
Now discuss on the forum
U

Как в qml работать с динамически созданными потомками?

Приветствую, уже полюбившийся форум) Есть у меня Item{id: _window}, в который я по нажатию кнопки создаю объекты: myComponent = Qt.createComponent(paletteItem.componentFile); myC…
U

Помогите сделать наследованый класс MenuElements от класса Menu

Я может что-то не совсем понял... Но наследовать элементы меню от самого меню - верное решение логически? Наследование нужно, чтобы в итоге получился класс, который будет иметь всё то же с…
KM

не знаю что писать в cpp

почти Actionn::Actionn(const QString& name, QWidget *parent) : //lista inicjalizacyjna MenuElement(name,parent), QWidget(parent), ui(new Ui::Actionn) вдруг кто то мучался к…

не могу передать стринг с QLineEdit

QLineEdit *myLineEdit = new QLineEdit("line edit name", this); QString str = myLineEdit->text();

QSqlTableModel не удаётся редактировать и удалять данные

Если через раз, то дело скорее всего в том, что обычно ID является автоинкрементируемым столбцом, который всегда растёт, даже если какие-то строки удалялись из базы данных. Если у вас было 4 зап…
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB