Blowfish加密/解密与结果保存(Qt - qblowfish)

时间:2014-05-28 11:59:07

标签: qt encryption blowfish

如果我在同时保存它的话,如何恢复我使用河豚的成功加密获得的密文?

secretKey是关键字的哈希值。

QString clearText(textBrowser->toHtml());

QBlowfish bf(secretKey);
bf.setPaddingEnabled(true);
QByteArray encryptedBa = bf.encrypted(clearText.toUtf8());

  // I want to save the encrypted text in a file to store it.
  // Here I am "emulating" this intent:
  // I am saving with flushing an outStream, I convert it to QString before:
QString test_SavedText(encryptedBa); //This value gets saved
QString cryptedText(test_SavedText); //"Read the stored file"

QByteArray decryptedBa = bf.decrypted(cryptedText.toUtf8());

encryptedBa正在运作。如果我直接将其插入到decrypted - 调用中,它就会被解密。 但是当我用cryptedText.toUtf8()调用解密时,它不起作用。

一些调试显示:QString需要填充。好吧,在解密方法中,我将填充添加到QByteArray(完全与加密方式相同)。但我的decryptedBa输出仍然是空的。而且我仍然不明白为什么我的QString需要填充 - 它不是由QByteArray制作的,它已经包含了填充?

2 个答案:

答案 0 :(得分:0)

我意识到现在是时候你问了这个问题,但是我只是偶然发现它,你不想在加密数据上使用.toUtf8(),而是在结果之后解密

答案 1 :(得分:0)

此代码对我有用

QString enc(QString data) {
    QBlowfish bf(QString("This is The key").toUtf8());
    bf.setPaddingEnabled(true);
    QByteArray cipherText = bf.encrypted(data.toUtf8());
    return QString(cipherText.toHex());
}

QString dec(QString enc_data) {
    QBlowfish bf(QString("This is The key").toUtf8());
    bf.setPaddingEnabled(true); 
    QByteArray decryptedBa = bf.decrypted(QByteArray::fromHex(enc_data.toUtf8()));
    return QString::fromUtf8(decryptedBa.constData(), decryptedBa.size());
}