gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:21 25 4
gpt4 key购买 nike

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

最佳答案

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

你应该使用一个函数直接写一个QByteArray

尝试用这个写:

file.write( result.toAscii() );

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

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

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

关于c++ - Qt C++ 如何将加密文本的 QByteArray 保存到文件中,然后读取并格式化为 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com