Я с численной Crypto ++ библиотеки в Qt из-за зашифровать строку с AES
методом в режиме CBC
и использование StringSource
и StringSink
определить input
и output
строковые параметры ,AES не работает должным образом в функции StringSource и StringSink в Qt
Во-первых, я прочитал все байты из файла («Unicode» или «ASCII» кодирования), а затем установить его в качестве параметра input
в StringSource
функции, а затем установить параметр как string
(типа данных) для вывода (шифра -текст). просто я хочу получить строку и зашифровать ее с помощью «aes-cbc» и показать результат.
Кроме того, я знаю FileSource
и FileSink
две функции (состоят input
и output
потока параметров) для записи данных в файлы! но я хочу читать содержимое файла как строку ввода.
Моего код:
void Widget::onEncryptButton()
{
QByteArray key = "qwertyuiopasdfgh";
QByteArray iv = "wertyuiopasdfghj"
QByteArray plain;
string cipher;
QFile fi("/home/msi/Desktop/input.txt");
QFile fo("/home/msi/Desktop/output.enc");
fi.open(QFile::ReadOnly);
fo.open(QFile::WriteOnly);
plain = fi.readAll();
AESEncryption aese((byte*)key.constData(), AES::DEFAULT_KEYLENGTH); // default is 16
CBC_Mode_ExternalCipher::Encryption encryptor(aese, (byte*)iv.constData());
StringSource(plain, true, new StreamTransformationFilter(encryptor, new StringSink(cipher)));
QMessageBox::information(this, "", QString("%1, %2").arg(strlen(cipher.c_str())).arg(cipher.size())); // just for viewing cipher length
fo.write(cipher.c_str());
fi.close();
fo.close();
}
Теперь у меня есть гофрированные проблемы:
Когда я прочитал содержание компактного файла (например, 900 байт) и установить его в качестве входных данных в
StringSource
, сгенерированный шифр будет неполным (например, 320 байт)Выход
strlen(cipher.c_str())
отличается поcipher.size()
в "QMessageBox"Мой код работает действительно Когда я читаю некоторые файлы («unicode» или «ASCII», «большой» или «маленький» размер), а иногда и некорректно работает. Я не понимаю, какая причина вызвала эту проблему?
- Даже я установил строку ввода напрямую (не читаю из файла) и снова сработал!
С уважением!
'QByteArray plain;' и 'StringSource (plain, true, ...);' должен вызывать сбой компиляции. 'StringSource' does * not * имеет ctor, который принимает' QByteArray'. Вероятно, вы должны добавить '-Wall -Wextra' для своих флагов компиляции. – jww