Qt C ++如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray

时间:2016-06-05 16:59:37

标签: c++ qt encryption qbytearray

我有一个非常简单的加密/解密程序。加密后,我的程序将加密文本作为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

1 个答案:

答案 0 :(得分:0)

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

您应该使用直接写QByteArray

的函数

尝试使用此文字写作:

file.write( result.toAscii() );

我不确定您应该使用哪种编码(如果读/写包含不同,也可以解释它在代码中失败。您可以尝试所有可用的编码:result.toLatin1(),{{1} },result.toLocal8Bit()。希望,一个人会按预期工作。

顺便说一下,QString可能不适合存储您的数据。你不能让result.toUtf8()改为SimpleCrypt::encryptToByteArray吗?

修改:离线讨论时,最终解决方案是修改QByteArray以返回SimpleCrypt::encryptToByteArray而不是QByteArrayQString表示存储字符串而不是字节数组)