Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt C++;如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray_C++_Qt_Encryption_Qbytearray - Fatal编程技术网

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

C++ Qt C++;如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray,c++,qt,encryption,qbytearray,C++,Qt,Encryption,Qbytearray,我有一个非常简单的加密/解密程序。加密后,我的程序将加密文本作为QByteArray返回,然后将其保存到文本文件中。从文件中检索ByteArray进行解密时,我不确定其格式是否正确,或者该文件是否添加了某种额外字符,如\n 以下是我的加密/解密函数: void Handler::updatePMEF(QString format) { SimpleCrypt crypto(Q_UINT64_C(0x0c2ad4a4acb9f023)); QString result = cry

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

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

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

尝试使用以下命令写入:

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

顺便说一句,QString一开始可能不适合存储您的数据。您不能调整
SimpleCrypt::encryptToByteArray
以返回
QByteArray


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

我在写入时将其转换为UTF-8,但在读取时返回null。@JamieThirkell:请查看我文章中的编辑。请先将结果转换为
QByteArray
,并检查其大小,以确保您正在向文件写入内容!@JamieThirkell:您能告诉我们最后的技巧是什么吗?请随意编辑我的文章最终工作代码。这可能会帮助其他人。
file.write( result.toAscii() );