C++ Qt C++;如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray
我有一个非常简单的加密/解密程序。加密后,我的程序将加密文本作为QByteArray返回,然后将其保存到文本文件中。从文件中检索ByteArray进行解密时,我不确定其格式是否正确,或者该文件是否添加了某种额外字符,如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
\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() );