В общем написал по урокам функции шифрования и дешифрования а они работают не корректно. Точнее:
Если я передаю ему строчку 63 символа и меньше, он шифрует и дешифрует нормально.
Если же я ему передам строчку более 63 символов он отказывается корректно работать, шифрует, но не дешифрует.
Вот код.
C++ (Qt)
p="123 ABC БЦА 11! 123 ABC БЦА 11! 123 ABC БЦА 11! 123 ABC БЦА 11!";//63символа
QString en=encrypt(p);
QString den=dencrypt(en);
p="Строчка:"+p+"\n Ен:"+en+"\n Ден:"+den;
uiR.textBrowser->setPlainText(p);
шифруем:
C++ (Qt)
QString rrr::encrypt(const QString & strToEnrypt){
QCA::Initializer init;
QCA::SecureArray arg = QVariant(strToEnrypt).toByteArray();
if(QCA::isSupported("aes128-cbc-pkcs7")){
QCA::SymmetricKey key(QVariant("16").toByteArray());
QCA::InitializationVector iv(QVariant("16").toByteArray());
QCA::Cipher cipher(QString("aes128"),QCA::Cipher::CBC,
QCA::Cipher::DefaultPadding,
QCA::Encode,
key, iv);
QCA::SecureArray u = cipher.update(arg);
QCA::SecureArray f = cipher.final();
QCA::SecureArray cipherText = u.append(f);
return cipherText.toByteArray();
}
return "NET";
}
дешифруем
C++ (Qt)
QString rrr::dencrypt(const QString & strToEnrypt){
QCA::Initializer init;
QCA::SecureArray cipherText = QVariant(strToEnrypt).toByteArray();
if(QCA::isSupported("aes128-cbc-pkcs7")){
QCA::SymmetricKey key(QVariant("16").toByteArray());
QCA::InitializationVector iv(QVariant("16").toByteArray());
QCA::Cipher cipher(QString("aes128"),QCA::Cipher::CBC,
QCA::Cipher::DefaultPadding,
QCA::Decode,
key, iv);
QCA::SecureArray plainText = cipher.update(cipherText);
plainText = cipher.final();
return QCA::SecureArray(cipher.process(cipherText)).data();
}
return "NET";
}
подскажите, что я не так сделал?
Если дописать в функцию шифрования алгоритм дешифровки то всё работает правильно, с любым количеством символов:
меняем строчку:
C++ (Qt)
return cipherText.toByteArray();
на вот это:
C++ (Qt)
cipher.setup( QCA::Decode, key, iv );
QCA::SecureArray plainText = cipher.update(cipherText);
plainText = cipher.final();
return cipherText.toByteArray()+" _ "+QCA::SecureArray(cipher.process(cipherText)).data();
и работает нормально...
В чём моя ошибка??
Попробуй дешифровать так:
C++ (Qt)
.... Initialization here
QCA::SecureArray plainText = ciphe.update(QCA::SecureArray(data));
if (!cipher.ok()) {
qWarning("Update failed\n");
}
QCA::SecureArray result = cipher.final();
const bool ret = cipher.ok();
if (ok) {
*ok = ret;
}
plainText += result;
if (!ret) {
qWarning("Final failed\n");
return QByteArray();
}
return QByteArray(plainText.constData(), plainText.size());
где "data" это QByteArray