Как стать автором
Поиск
Написать публикацию
Обновить

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
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.