我有一个我想要使用的软件的DLL。在DLL API中有一个函数“LoadConfigFile(char * file)”,它需要一个带有aboslute路径的文件名(例如“C:\ TestFolder \ ConfigFile.cfg”)。然后该函数加载配置文件本身。
出于安全原因,我想允许仅对使用DLL的程序访问文件(内容)。
所以我想知道如何做到这一点并在互联网上寻找解决方案。在寻找解决方案时,会想到以下选项和问题:
我可以加密文件。 - >有人知道这个免费图书馆吗? - >那么可以将函数作为astring函数给出,函数可以读取文件吗?
也许有可能使用虚拟文件系统。我的意思是从加密的源加载文件,解密它并将其保存在虚拟磁盘或文件夹的RAM中。然后将链接作为字符串提供给DLL函数 - >这可能吗? - >有人知道有免费图书馆吗?
我还读到了一些关于“在内存数据库中”的内容。 - >这可以解决我的问题吗?
我的开发环境是VC ++ 2010,操作系统是Windows XP。
我希望有人可以帮我解决这个问题。
答案 0 :(得分:1)
您的数据有多敏感?您的申请目标是什么?
在许多情况下,简单的家庭加密机制可能足以吓跑随意的读者。
如果您的数据需要彻底加密,请查看Windows加密函数(例如CryptProtectData,请参阅http://msdn.microsoft.com/en-us/library/aa380261(VS.85).aspx)。
在某些情况下,您不希望加密数据,但您只是想确保没有人更改它。在这种情况下,请将哈希值(SHA-2,请参阅http://en.wikipedia.org/wiki/SHA-2)添加到您的文件中。
答案 1 :(得分:1)
我能想到的唯一一件事 - 我手边没有源代码 - 是hash and decrypt。
使用从代码哈希派生的密钥对任何内容进行加密。不要将钥匙存放在任何地方。你的代码是关键。更好的是,哈希一些只有你的程序成功运行才能创建的内存结构。
但是每次更新代码时它都会破坏。您将不得不考虑32位和64位架构。指针alingment可能会发挥作用。确保您的安全要求值得付出努力,并且不要低估维护工作量。
通常,CryptProtectData会这样做,并提供pOptionalEntropy参数以增加安全性(然后接受@Patrick答案,而不是我的)。
答案 2 :(得分:1)
太复杂了。最简单的解决方案(因为你是控制过程)是:
FILE_ATTRIBUTE_TEMPORARY
和FILE_FLAG_DELETE_ON_CLOSE
,因为它不是永久性的由于临时文件在包含机密内容时被锁定,因此没有其他进程可以访问它。由于它被标记为临时删除,因此Windows不会将其刷新到物理磁盘。
当然,这不是完美的安全性。任何能够读取你的进程内存(i..e有SeDebugPrivilege
)的人都可以访问这些信息,但这很明显。只需在LoadConfigFile
上放置调试断点即可。