Набор библиотек для переноса QCA:
plugins\crypto\qca-ossl2.dll 196 Kb
qca2.dll 749 Kb
libeay32.dll 1 Mb
ssleay32.dll 200 Kb
Получается довесок в пару мегабайт за возможность шифровать/дешифровать.
Показаны сообщения с ярлыком Криптография. Показать все сообщения
Показаны сообщения с ярлыком Криптография. Показать все сообщения
вторник, 16 февраля 2010 г.
Криптография под Qt выпуск 3
Криптография с симметричным ключом вполне заработала. Ширфемся по алгоритму AES.
Чтобы расшифроваться нужно у чипера поменять
В следующем выпуске рассмотрим какие библиотеки нужны для переноса OpenSSL на чистую машину.
Чтобы расшифроваться нужно у чипера поменять
QCA::Encode на QCA::Decode. QString encrypt(const QString & strToEnrypt)
{
//инициализация
QCA::Initializer init;
//переводим строку в засекречивамый массив
QCA::SecureArray arg = QVariant(strToEnrypt).toByteArray();
QString res;
// проверка что поддерживаем алгоритм AES128 testing
if (QCA::isSupported("aes128-cbc-pkcs7"))
{
QString sKey = "aes128-cbc-pkcs7-sn93-sh21-jks-12";
//некоторые преобразования над ключом
//по идее должны затруднять реверсинг
QStringList lst = sKey.split("-");
lst = lst.replaceInStrings("c", "s");
lst.removeAt(0);
lst.removeAt(5);
QString sKeyCh = lst.join(".");
//создаем ключ
QCA::SymmetricKey key(QVariant(lst.join(".")).toByteArray());
//Создать случайный инициализирующий вектор
//вам нужно это значение чтобы расшифровать результат шифра
//но это нужно хранить в секрете в отличие от ключа
QCA::InitializationVector iv(QVariant(lst.join(">")).toByteArray());
//содать 128 битный AES шифр объект используя CBC режим
QCA::Cipher cipher(QString("aes128"), QCA::Cipher::CBC,
//использовать отступ по умолчанию который эквивалентен PKCS7 для CBC
QCA::Cipher::DefaultPadding,
// этот объект будет зашифрован
QCA::Encode,
key, iv);
QCA::SecureArray u = cipher.update(arg);
if (!cipher.ok())
{
return res;
}
QCA::SecureArray f = cipher.final();
if (!cipher.ok())
{
return res;
}
res = QString(f.data());
}
return res;
}
* This source code was highlighted with Source Code Highlighter.В следующем выпуске рассмотрим какие библиотеки нужны для переноса OpenSSL на чистую машину.
понедельник, 15 февраля 2010 г.
Криптография под Qt выпуск 2
Как оказалось, чтобы собрать нормальную дебаг версию надо было указать ключ --debug-and-release для configure.exe.
Но это еще не все.
По умолчанию QCA поддерживает только алгоритмы SHA1 и MD5. Чтобы получить остальное нужно ставить дополнительный плагин qca-ossl-2.0.0-beta3.tar.bz2.
Установка его дает нам такой комбайн поддерживаемых алгоритмов: TLS, CMS, X.509, RSA, DSA, Diffie-Hellman, PKCS#7, PKCS#12, SHA0, SHA1, SHA224, SHA256, SHA384, SHA512, MD2, MD4, MD5, RIPEMD160, Blowfish, DES, 3DES, AES128, AES192, AES256, CAST5, HMAC(SHA1, MD5, RIPEMD160), PBKDF1(MD2, SHA1), PBKDF2(SHA1).
Этот плагин в свою очередь зависит от OpenSSL версии не ниже 0.9.6
Взять его можно здесь openssl-0.9.8l
После чего конфигуряется командой
> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
Затем
> ms\do_ms
И
> nmake -f ms\ntdll.mak
> nmake -f ms\ntdll.mak install
После установки OpenSSL нужно сплясать еще один танец с бубном. Это касатся уже установки плагина qca-ossl.
В Папке %QTDIR% \mkspecs\features нужно создать файл winlocal.prf со строчкой WINLOCAL_PREFIX = D:/OpenSSL
То есть, указать путь до собранной OpenSSL.
В ходе сборки плагина у меня выскакивала ошибка, что де не найден OBJ_whirlpool. Эта переменная определена в OpenSSL, и управляет включением алгоритма Whirlpool — криптографическая хеш-функция.
Однако плагин в упор не видит исходного кода алгоритма и вылетает. Пришлось в коде плагина убрать упоминания о Whirlpool.
В итоге плагин qca-ossl2.dll все таки собрался.
Копируем его в %QTDIR%\plugins\crypto.
Завтра будем пробовать. По крайней мере if(QCA::isSupported("aes128-cbc-pkcs7")) стало возвращать true.
Но это еще не все.
По умолчанию QCA поддерживает только алгоритмы SHA1 и MD5. Чтобы получить остальное нужно ставить дополнительный плагин qca-ossl-2.0.0-beta3.tar.bz2.
Установка его дает нам такой комбайн поддерживаемых алгоритмов: TLS, CMS, X.509, RSA, DSA, Diffie-Hellman, PKCS#7, PKCS#12, SHA0, SHA1, SHA224, SHA256, SHA384, SHA512, MD2, MD4, MD5, RIPEMD160, Blowfish, DES, 3DES, AES128, AES192, AES256, CAST5, HMAC(SHA1, MD5, RIPEMD160), PBKDF1(MD2, SHA1), PBKDF2(SHA1).
Этот плагин в свою очередь зависит от OpenSSL версии не ниже 0.9.6
Взять его можно здесь openssl-0.9.8l
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT. Также имеется возможность шифрования данных и тестирования SSL/TLS соединений.Чтобы собрать OpenSSL нужен Perl. Пришлось поставить Strawberry Perl.
OpenSSL поддерживает разные алгоритмы шифрования и хеширования:
Поддержка алгоритмов ГОСТ появилась в версии 1.0.0, в данный момент находящейся в стадии бета-тестирования.
- Симметричные
- Blowfish, Camellia, DES, RC2, RC4, RC5, IDEA, AES, ГОСТ 28147-89
- Хеш-функции
- MD5, MD2, SHA, MDC-2, ГОСТ Р 34.11-94
- Асимметричные
- RSA, DSA, Diffie-Hellman key exchange, ГОСТ Р 34.10-2001, ГОСТ Р 34.10-94
После чего конфигуряется командой
> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
Затем
> ms\do_ms
И
> nmake -f ms\ntdll.mak
> nmake -f ms\ntdll.mak install
После установки OpenSSL нужно сплясать еще один танец с бубном. Это касатся уже установки плагина qca-ossl.
В Папке %QTDIR% \mkspecs\features нужно создать файл winlocal.prf со строчкой WINLOCAL_PREFIX = D:/OpenSSL
То есть, указать путь до собранной OpenSSL.
В ходе сборки плагина у меня выскакивала ошибка, что де не найден OBJ_whirlpool. Эта переменная определена в OpenSSL, и управляет включением алгоритма Whirlpool — криптографическая хеш-функция.
Однако плагин в упор не видит исходного кода алгоритма и вылетает. Пришлось в коде плагина убрать упоминания о Whirlpool.
В итоге плагин qca-ossl2.dll все таки собрался.
Копируем его в %QTDIR%\plugins\crypto.
Завтра будем пробовать. По крайней мере if(QCA::isSupported("aes128-cbc-pkcs7")) стало возвращать true.
пятница, 12 февраля 2010 г.
Криптография под Qt выпуск 1
В стандартной поставке Qt совсем немного средств для криптографии. По сути все ограничивается одним классом QCryptographicHash.
Этот класс может получать хэш от некоторых данных, представленных в QByteArray, используя алгоритмы Md4, Md5, Sha.
Ну а что такое хэш? Хэш это необратимая последовательность символов, зная которую исходные данные никак не получить. Это удобно для хранения паролей. Хранишь хэш пароля и сравниваешь хэши паролей вместо них самих.
Однако в ряде случаев этого бывает недостаточно. И хочется иметь нормальное обратимое шифрование с ключами.
Порыскал в инете на эту тему, нашел пакет Qt Cryptographic Architecture (QCA).
Обитает он на:
http://delta.affinix.com/qca/
Скачиваем, разворачиваем в %QTDIR%/src/3rdparty/
Далее, configure.exe & nmake & installwin.exe
В результате оно установит Qt feature, т.е. фишку Qt.
Теперь в файле проекта можно написать CONFIG += crypto
И использовать в коде #include <QtCrypto>
На этом пока мое знакомство с QCA закончилось. В дебаге оно почему то не может найти либу qcad.lib, в релизе собирается нормально. Будем разбираться дальше.
Upd:
Для дебага пришлось поправить строку в %QTDIR%/mkspecs/features/crypto.prf
Вместо windows:LINKAGE = -lqcad
написал windows:LINKAGE = -lqca2
Этот класс может получать хэш от некоторых данных, представленных в QByteArray, используя алгоритмы Md4, Md5, Sha.
Ну а что такое хэш? Хэш это необратимая последовательность символов, зная которую исходные данные никак не получить. Это удобно для хранения паролей. Хранишь хэш пароля и сравниваешь хэши паролей вместо них самих.
Однако в ряде случаев этого бывает недостаточно. И хочется иметь нормальное обратимое шифрование с ключами.
Порыскал в инете на эту тему, нашел пакет Qt Cryptographic Architecture (QCA).
Обитает он на:
http://delta.affinix.com/qca/
Скачиваем, разворачиваем в %QTDIR%/src/3rdparty/
Далее, configure.exe & nmake & installwin.exe
В результате оно установит Qt feature, т.е. фишку Qt.
Теперь в файле проекта можно написать CONFIG += crypto
И использовать в коде #include <QtCrypto>
На этом пока мое знакомство с QCA закончилось. В дебаге оно почему то не может найти либу qcad.lib, в релизе собирается нормально. Будем разбираться дальше.
Upd:
Для дебага пришлось поправить строку в %QTDIR%/mkspecs/features/crypto.prf
Вместо windows:LINKAGE = -lqcad
написал windows:LINKAGE = -lqca2
Подписаться на:
Комментарии (Atom)