Расшифровка QCA blowfish не удалась - PullRequest
1 голос
/ 23 декабря 2011

Я пытаюсь использовать 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);
}
...