Чтобы расшифроваться нужно у чипера поменять
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 на чистую машину.
спасибо очень полезная статья
ОтветитьУдалитьТы реально понимешь что тут написано?)))
ОтветитьУдалитьВ чем трудности? Код простейший
ОтветитьУдалитьЕсли ты про слова PKCS7 CBC AES то да, не очень понимаю, но это и не нужно для простейшего прикладного использования. А подробнее можно узнать на википедии
ОтветитьУдалитьНебольшая поправочка
ОтветитьУдалить// Create a random initialisation vector - you need this
// value to decrypt the resulting cipher text, but it
// need not be kept secret (unlike the key).
QCA::InitializationVector iv(16);
судя по оригинальному комменту, вектор НЕ нужно хранить в секрете (в отличие от ключа)