Когда я начинал изучать Qt4, я восхищался этим фрэймворком и часто вступал в противостояния холиваров и различных споров вроде «Qt vs ...», защищая Qt. В одном из таких споров мне задали вопрос касающийся, криптографии в Qt. В ответ я привёл такие возможности Qt, как QSSLSocket, а так же возможность использования сторонних Crypto API, т.к. с криптографией в Qt дело не имел.
Как-то мне пришлось написать программу, использующую шифрование как в сети, так и при записи в файл. Я начал подбирать CryptoAPI и выбор пал на OpenSSL. После нескольких часов изучения API, я понял, что просто так с этим не разобраться и возможно есть другие пути привязки CryptoAPI к Qt. Погуглив, я нашёл интересный биндинг под суровым названием QCA.
QCA (Qt Cryptography Architecture) — это привязка Qt к известным CryptoAPI:
Использование этого биндинга позволяет очень просто подключать нужные 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:
Для добавления записи о путях QCA, в Qt есть bat-файл. Можно собрать с помощью cmake.
После чего в директории plugins нужно выбрать CryptoAPI и собрать для него плагин. Скомпилированные библиотеки закинуть в директорию %QTDIR%/plugins/crypto. Описание сборки плагинов читайте в README находящегося в директории плагина выбранного CryptoAPI.
Если сборка немного устрашает, то использование приносит удовольствие.
Перед началом добавьте к файлу проекта (.pro) строку:
Пример использования QHash:
Как-то мне пришлось написать программу, использующую шифрование как в сети, так и при записи в файл. Я начал подбирать 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