Search
Write a publication
Pull to refresh

Qt4 + Криптография

Когда я начинал изучать Qt4, я восхищался этим фрэймворком и часто вступал в противостояния холиваров и различных споров вроде «Qt vs ...», защищая Qt. В одном из таких споров мне задали вопрос касающийся, криптографии в Qt. В ответ я привёл такие возможности Qt, как QSSLSocket, а так же возможность использования сторонних Crypto API, т.к. с криптографией в Qt дело не имел.

Как-то мне пришлось написать программу, использующую шифрование как в сети, так и при записи в файл. Я начал подбирать CryptoAPI и выбор пал на OpenSSL. После нескольких часов изучения API, я понял, что просто так с этим не разобраться и возможно есть другие пути привязки CryptoAPI к Qt. Погуглив, я нашёл интересный биндинг под суровым названием QCA.

QCA (Qt Cryptography Architecture) — это привязка Qt к известным CryptoAPI:
  • OpenSSL
  • Cyrus SASL2
  • GnuPG
  • Botan
а так же другие.

Использование этого биндинга позволяет очень просто подключать нужные CryptoAPI.

Установка/сборка.


На unix-платформе QCA идёт в составе kde (пакет qca2, qca2-dev), а так же в составе IM клиента PSI. На Windows и Mac OS X можно скачать и собрать из исходников c KDE SVN:
svn://anonsvn.kde.org/home/kde/trunk/kdesupport/qca

Сборка стандартная для Qt:
qmake
make

Для добавления записи о путях QCA, в Qt есть bat-файл. Можно собрать с помощью cmake.
После чего в директории plugins нужно выбрать CryptoAPI и собрать для него плагин. Скомпилированные библиотеки закинуть в директорию %QTDIR%/plugins/crypto. Описание сборки плагинов читайте в README находящегося в директории плагина выбранного CryptoAPI.

Использование.


Если сборка немного устрашает, то использование приносит удовольствие.
Перед началом добавьте к файлу проекта (.pro) строку:
CONFIG+=crypto

Пример использования QHash:
#include <QtCrypto>
#include <QCoreApplication>

int main(int argc, char **argv)
{
  QCA::Initializer init; // Инициализация QCA
  QCoreApplication app(argc, argv);

  if(QCA::isSupported("sha1")) // Проверяем поддержку SHA1
    qDebug() << "Hash:" << QHash("sha1").hashToString("Hello world!"); // Выводим хеш
  else
    qDebug() << "SHA1 not supported";

  return 1;
}


* This source code was highlighted with Source Code Highlighter.
Всё очень просто и удобно. Приятная документация (посмотреть её можно
здесь) с наглядными примерами.
Но не обошлось и без минусов — скомпилированная библиотека занимает 1.3мб при release-сборке.

Сайт QCA
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.