我可以将一些文件解密到内存中,然后在不使用硬盘的情况下将其用作普通文件吗?
更确切地说,我想解密一个包含一些敏感数据的 .mdb 文件,并像从磁盘加载一样对其进行操作,但不使用临时文件。 我想也许我可以从解密的字节数组中做一个文件对象或流(仍然需要计算代码),但是,问题是 OleDbConnection 从包含文件名的字符串加载数据。
让我们举个例子:
byte[] someArrayWithTheContentsOfAdotMDBFile = getDecryptedFile();
[...]
//即使我将数组包装到一个文件或流中,加载过程也需要一个文件名
using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\"+ fileNameHere)) // can fileNameHere be a File object, stream or any trick like that??
编辑:由于答案以这种方式出现,我将标题更改为“正在加载数据库...”。我仍然对从内存中加载任何文件类型感兴趣,但让我们把它留给另一个线程
最佳答案
我不认为 access 可以做到这一点......
但是您使用以下设置来实现您的目标:
使用 SQLite
它可以使用内存(纯 RAM)作为存储并对其进行操作使用加密的“SQLite-Dump”(即备份)作为您的传输机制(文件)
当您需要对其进行操作时,将其加载到内存中,对其进行解密,创建一个空的“SQLite 内存中实例”并从您的解密流中“恢复”
注意:
您要求的方案对于某些数据库引擎(例如 SQLite)是可行的,但是因为您需要解密文件,所以您的应用程序必须包含解密所需的 key 。
这意味着如果有人想读取您的数据库文件,他们可以首先分析您的应用程序、恢复解密 key 等。
如果您使用“对称加密”(例如 AES),那么他们甚至可以在您的应用程序不注意的情况下修改数据库文件。
如果您使用“非对称加密”(例如 RSA),那么他们仍然可以读取它,但他们不能修改数据库文件。
关于安全性的一个非常重要的观点:任何在您不 100% 控制的机器上运行的东西都可以被“破解”——这仅取决于攻击者的能力和动机。
关于c# - 从内存中加载数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887830/