我正在加密和解密图像,因为它们包含敏感信息。
我在这里遇到的困难是我无法执行标准的 Process.Start(saveImagePath);
因为加密的问题。
到目前为止,我的解决方案是制作一个在 PictureBox
中打开它的 Windows 窗体,因为它不需要路径,我可以这样做:
newImage = enc.Decrypt();
pictureBox1.Image =newImage;
但是尝试模拟 Windows 照片查看器却很困难。
我的问题是,我可以仅使用图像 newImage = enc.Decrypt();
打开图像,而不使用 Windows 照片查看器(或任何其他类似软件)中的路径,还是我注定要失败尝试复制照片查看器程序?
最佳答案
首先我要说的是,如果图像信息高度敏感,那么就没有办法将其展示给用户并保证其100%的安全性。即使使用内存流,也可以进行内存转储并访问敏感信息。这并非微不足道,但可行。
现在这已经不成问题了,Windows 进程无法直接访问彼此的内存,除非通过像 ReadProcessMemory
这样的特权调试 API 函数。这就是使 Windows 保持稳定和安全的原因,但却使您想要完成的任务变得不可能。您必须使用文件。
其他人建议将该文件保存在 Windows 临时文件夹中。这并不比像您所做的那样将其保存在任何其他文件夹中更安全。更安全一点的方法是创建 RAM 磁盘,将文件保存在那里,显示它们,然后删除 RAM 磁盘。
RAM-Disk 是硬盘的内存模拟,您可以使用驱动器号以相同的方式访问它。创建然后删除 RAM 磁盘并不是一项简单的任务,它仅提供了更多的安全性,但您是唯一可以决定是否值得这样做的人。用户仍然可以查看和访问 RAM 磁盘上的文件,但仅限于将其删除之前。因此,它提供的唯一增加的安全性是减少用户可以直接访问文件的窗口。
像您正在做的那样在自己的应用程序中打开图像仍然是最安全的方法,因为提取这些文件的唯一方法是进行内存转储,而这对于图像来说确实很困难(对于文本来说更容易)。如果您不想自己编写所有代码,可以搜索一些库。
关于c# - 我可以在 Windows 照片查看器中打开图像而无需图像路径吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48523433/