【问题标题】:Qt C++ How to save QByteArray for encrypted text to a file, then read and format back as a QByteArrayQt C++如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray
【发布时间】:2016-10-05 07:09:59
【问题描述】:

我有一个非常简单的加密/解密程序。加密后,我的程序将加密文本作为 QByteArray 返回,然后我将其保存到文本文件中。从文件中检索 ByteArray 进行解密时,我不确定它的格式是否正确,或者文件是否添加了某种额外的字符,例如 \n

这是我的加密/解密函数:

void Handler::updatePMEF(QString format) {

    SimpleCrypt crypto(Q_UINT64_C(0x0c2ad4a4acb9f023));
    QString result = crypto.encryptToByteArray(format);

    QFile file("C:/test.txt");
    if ( file.open(QIODevice::ReadWrite) ) {
        QTextStream stream( &file );
        stream << result << endl;
    }
}

QString Handler::openPMEF() {
    QByteArray encrypted;

    QFile file("C:/test.txt");
    if ( file.open(QIODevice::ReadOnly) ) {
         encrypted = file.readAll();
    }

    SimpleCrypt crypto(Q_UINT64_C(0x0c2ad4a4acb9f023));
    QString decrypted = crypto.decryptToByteArray(encrypted);

    return decrypted;
}

在调用openPMEF() 后,调试器没有返回任何东西,所以我认为出现了问题。

在我尝试做QByteArray = encrypted 之前希望它会转换并且调试器返回:

Decrypyted: ????\u00153C?????qW\f????\u00153\u0019????\u00153\u001C????\u0006 \u001C?????2\u0014\u001C????\f*v?????\u00153'?????\u0004\"~?D?\u0005?\u00153(???? \u0006\u001Cf???\u00153I?????dB2??\u00153\u001C????\u00153l?????-\u000B\u001C?????\u00153I?????\u00153\u001C????\u0018>\u001Cf???\u00153(?????jLa????\u00153\u0006?????\u001D;)????DbK????~X\u0010Ö???\u0001'\u001B?????rTl?????\u0005#Z????X~Q?????F`G???²\u001A<B???? \u0006G?????F`r????? \u0006

【问题讨论】:

    标签: c++ qt encryption qbytearray


    【解决方案1】:

    这很可能是因为您在写作时使用了QTextStream。例如,这个很可能会在第一个 OES (\0) 上停止,而您的加密数据可能包含很多。

    您应该使用直接写入QByteArray 的函数。

    试着用这个写:

    file.write( result.toAscii() );
    

    我不确定你应该使用什么编码(这也可以解释它在你的代码中失败,如果读/写编码不同。你可以尝试所有可用的:result.toLatin1()result.toLocal8Bit()result.toUtf8()。希望能按预期工作。

    顺便说一句,也许 QString 一开始就不适合存储您的数据。你不能调整SimpleCrypt::encryptToByteArray 来返回QByteArray吗?

    编辑:正如离线讨论的那样,最终的解决方案是修改 SimpleCrypt::encryptToByteArray 以返回 QByteArray 而不是 QStringQString 旨在存储字符串而不是字节数组)

    【讨论】:

    • 我在写入时已将其转换为 UTF-8,但在读取时返回 null。
    • @JamieThirkell:请参阅我帖子中的编辑。请先将结果转换为 QByteArray 并检查其大小,以确保您正在向文件中写入内容!
    • @JamieThirkell:你能告诉我们最后的诀窍是什么吗?随意使用最终工作代码编辑我的帖子。这可能对其他人有所帮助。
    猜你喜欢
    • 2017-10-30
    • 2014-06-03
    • 2018-12-31
    • 2015-09-28
    • 2022-06-27
    • 2016-11-27
    • 2014-04-21
    • 2017-12-13
    • 2014-12-23
    相关资源
    最近更新 更多