Чтобы расшифроваться нужно у чипера поменять
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 на чистую машину.