Вступление
В этой статье есть способ, как организовать шифрование сообщений, а также использовать алгоритмы RSA (открытые и закрытые ключи) без библиотек, подобных OpenSSL, QCA или LibSodium.
Как это работает?
Зачем это нужно?
Существует множество алгоритмов шифрования, большинство из них основаны на идее, что в полученном вами сообщении есть ключ для шифрования вашего сообщения и отправки его получателю. Предполагается, что получатель уже получил ключ шифрования, поэтому получатель может его расшифровать. Однако этот метод ни в коем случае нельзя использовать, потому что ключ шифрования должен быть каким-то образом отправлен так, чтобы никто не смог его перехватить, а это практически невозможно.
Именно поэтому в настоящее время метод шифрования RSA с использованием открытого и закрытого ключа (асинхронное шифрование) стал самым надежным и популярным.
Принцип работы следующий:
В качестве примера используем уже устоявшиеся имена участников шифрования: Алиса и Боб.
Предположим, Алиса хочет послать Бобу секретное сообщение, но не хочет, чтобы кто-либо еще его увидел.
Боб создает два ключа для этой операции: открытый и закрытый.
Боб отправляет открытый ключ Алисе.
Алиса шифрует сообщение открытым ключом Боба.
Алиса отправляет зашифрованное сообщение Бобу.
Боб расшифровывает сообщение Алисы с помощью закрытого ключа.
Ева, которая хочет узнать, чем переписываются Алиса и Боб, перехватывает все их сообщения. Она ничего не может с ними сделать, так как у нее нет их закрытых ключей, так как в алгоритме RSA зашифрованное сообщение с ключом A (открытый ключ) может быть расшифровано только его парой A1 (закрытый ключ).
Таким образом, вы сможете легко и удобно защитить важную информацию.
Описание.
Qt-Secret — это простая библиотека, созданная группой QuasarApp на Qt/qmake, цель — для обеспечения основных возможностей шифрования, которых нет в родном Qt. А именно: алгоритмы RSA и AES.
Ключевая особенность:
- Генерация пар ключей RSA64 и RSA128 (предполагается поддержка количества номеров до RSA2048)
- Шифрование и дешифрование RSA.
- Подпись и аутентификация сообщения.
- Генерация ключей AES (AES64, AES128, AES256)
- Шифрование и дешифрование AES
Работа с Qt-Secret
Соберите библиотеку и добавьте ее в проект с помощью qmake
-
Откройте свой репозиторий
cd yourRepo
-
Добавьте Qt-Secret в свой репозиторий, например, подмодуль
The git add submodule https://github.com/QuasarApp/Qt-Secret.git
Обновите свои подмодули
git submodule update --init --recursive
Добавьте свой файл библиотеки Qt-Secret «pri» в свой «pro» файл.
include ($$PWD/Qt-Secret/src/Qt-Secret.pri)
- Пересоберите проект
Библиотека добавлена в ваш проект, теперь вы можете ею пользоваться.
Пример использования
Шифрование и дешифрование сообщений.
#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.
Подпись и проверка подписи сообщения.
#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 }
Вывод
Эта библиотека является хорошим решением для простых задач шифрования.
- легко включить;
- легко использовать.
Хорошо использовать пару ключей для одного сеанса работы.
Доброго времени суток, не подскажите, что делать в данной ситуации, после того, как я сделал все вышеуказанные инструкции для подключения библиотеки к проекту?
Выглядит как ошибка библиотеки. Расскажите подробно на какой платформе вы собираете проект (MinGW или MSVC) их версии и версии Qt.
Та же самая ошибка. MinGW, Qt 5.14.2
Для тех у кого возникает ошибка cannot find -lQt-Secret1, cannot find -lQtBigInt6
Решение и описание проблеммы здесь
Библиотека подключилась нормально, только на выводе из первого примера выходит пустое сообщение, вместо "test message" просто "". Никаких ошибок не выдает.
Возможно ли с помощью этой библиотеки шифровать файлы, а не обычные строки?