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