Qt C++ - 如何保护文件

3
我的应用程序生成包含重要文件的.zip文件,我不希望最终用户可以访问这些数据。为了压缩,我使用QuaZIP库。
我的第一个想法是对zip文件设置密码,但似乎很复杂,也不太安全。如果你有解决方案,它将足以满足我的需求。
否则,你有什么想法可以轻松保护文件吗?我能加密它吗?
非常感谢。 我使用Qt 5.11和MSVC2017。

你愿意采取多大的措施来阻止一个决心入侵数据的黑客吗?还是你试图防止一个随意好奇的用户意外破坏应用程序数据文件?这听起来像是一个XY问题 - 你想要阻止用户访问磁盘上的文件,但是关于为什么需要保护用户自己设备上的数据有一些根本性的问题。请详细说明。 - selbie
它们不是关键数据,所以我不需要非常先进的解决方案。我的意思是,即使是一个密码也足够了,但我找不到一个容易实现的解决方案,所以我正在寻找其他的解决方案。事实上,我们将要求客户从设备中提取数据,并通过电子邮件等方式将zip文件发送给我们,但我们不希望他们查看其中的内容。 - Sébastien B.
你是否期望用户键入密码来解锁? - selbie
Selbie,如果我选择密码保护,它将出现在我的应用程序中,只有来自我的公司的用户才能解压缩它。感谢您的帮助。 - Sébastien B.
相关链接:https://security.stackexchange.com/questions/35818/are-password-protected-zip-files-secure - drescherjm
1个回答

3

最简单的保护方法:只需更改文件扩展名(例如,从.zip更改为.bin)。例如使用QFile::rename()

QFile::rename("your_file.zip", "your_file.bin");

另一种方法:
读取文件中的所有数据并进行加密。您可以使用SimpleCrypt
SimpleCrypt crypto(Q_UINT64_C(0x0c2ad4a4acb9f023)); //some random number. This is your encryption key
...

QByteArray buffer = file.readAll();

QByteArray encryptedBuffer = crypto.encryptToByteArray(buffer.data());

// Write the encrypted data to a new file
QFile newFile("new_file.bin");
...
newFile.write(encryptedBuffer);

接下来,您可以发送这个 newFile

在接收方方面,从接收到的文件中读取所有数据到一个 buffer

QByteArray encryptedBuffer = receivedFile.readAll();

SimpleCrypt crypto(Q_UINT64_C(0x0c2ad4a4acb9f023)); //same random number: key should match encryption key

QByteArray yourDecryptedData = crypto.decryptToByteArray(encryptedBuffer);

好的回答。我正要建议在评论中更改文件扩展名。更改文件扩展名将阻止大约99%或更多的所有随意窥探。如果客户不具备技术能力,这将更接近于100%。这对于OP和他的客户可能已经足够了。 - selbie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接