Я пытаюсь использовать QCA для шифрования / дешифрования файлов.
Когда я использую этот код для шифрования, все работает нормально (или кажется, по крайней мере).
Но когда я пытаюсь расшифровать, метод process () возвращает пустой SecureArray.
У кого-нибудь есть идея, почему и / или как это исправить?
void FileCrypto::crypt(QByteArray key, bool crypt){
QCA::Initializer init;
open();
Cipher cipher = initializeCipher(key, crypt);
QTextStream in(source); //lecture ligne par ligne
while (!in.atEnd()) {
QString line = in.readLine();
SecureArray secureData = line.toAscii().data(); //securise les donnees
if(!crypt)
QString temp = QString::fromAscii(secureData.toByteArray().toHex());
qDebug() << "Données lues : " << secureData.data();
SecureArray cryptedData = cipher.process(secureData); //(de)crypte les donnees
qDebug() << "Données cryptées :" << cryptedData.data();
destination->write(cryptedData.data()); //ecris dans le nouveau fichier
}
close();
}
void FileCrypto::open() throw (QString){
if(!source->open(QIODevice::ReadOnly | QIODevice::Text)
|| !destination->open(QIODevice::WriteOnly | QIODevice::Text)){
throw QString("Impossible d'ouvrir les fichiers cibles.");
}
}
void FileCrypto::close(){
source->close();
destination->close();
}
Cipher FileCrypto::initializeCipher(QByteArray akey, bool crypt){
QCA::InitializationVector iv;
Direction direction;
SymmetricKey key = SymmetricKey(akey);
iv = InitializationVector(akey);
if(crypt){
direction = Encode;
}else{
direction = Decode;
}
return Cipher(QString("blowfish"),Cipher::CBC,
Cipher::DefaultPadding, direction, key, iv);
}