KNe*_*jad 6 encryption openssl
我有一个加密文件并解密它我使用命令:
openssl aes-256-cbc -d -in encrypted_file -out unencrypted_file
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,会创建一个未加密的文件,完成后我必须将其删除。这意味着如果有人拿到我的电脑并使用某种数据恢复工具,他们可以获得未加密的文件。有没有办法在不创建另一个文件的情况下访问加密文件中的数据?
我假设你正在使用 Linux,并且有一些想法......
\n\n一种简单的方法是仍然创建解密的文件,但不将其写入磁盘。将其放入 ram 中,例如使用ramfs或tmpfs文件系统。不过,问题可能是:
\n\n您的/tmp
文件夹或其他文件夹(如/run
、/run/shm
、/run/user
)可能已作为 tmpfs 挂载,您可以使用 进行检查mount|grep tmpfs
。
要创建一个新的tmpfs,你可以这样做(如果你愿意,可以选择以字节为单位的大小,类似于-o size=16384
,我认为它默认为 ram 的一半):
sudo mount -v -t tmpfs tmpfs /mountpoint\n
Run Code Online (Sandbox Code Playgroud)\n\n要使用旧的ramfs,它不会被写入交换,但没有大小限制,这应该可以工作:
\n\nsudo mount -v -t ramfs ramfs /mountpoint\n
Run Code Online (Sandbox Code Playgroud)\n\n尽管上面的链接警告:
\n\n\n\n\nramfs 文件系统不能像基于磁盘的文件系统那样限制大小,后者受其\xe2\x80\x99s 容量的限制。ramfs 将继续使用内存存储,直到系统耗尽 RAM 并可能崩溃或变得无响应
\n
另外,这里的内核文档还警告并说:
\n\n\n\n\nramfs 的一个缺点是您可以继续向其中写入数据,直到填满所有内存,而虚拟机无法释放它,因为虚拟机认为文件应该写入后备存储(而不是交换空间) ,但 ramfs 没有任何后备存储。因此,只有 root(或受信任的用户)才被允许对 ramfs 挂载进行写访问。
\n\n创建了名为tmpfs的ramfs衍生产品,以增加大小限制以及将数据写入交换空间的能力。可以允许普通用户对 tmpfs 挂载进行写入访问。有关更多信息,请参阅 Documentation/filesystems/tmpfs.txt。
\n
如果上述 RAM 问题太多,您可以使用另一个程序再次加密磁盘上的文件,但这样就可以“即时”读取和使用未加密的文件(例如,解密版本看起来和行为就像常规文件,但在磁盘上保持加密状态)。您可以使用 dm -crypt/LUKS/truecrypt 和 cryptsetup创建加密分区或容器文件,或者使用eCryptFS或EncFS创建加密文件夹,然后在其中解密文件。
\n\n例如,要使用 ext4 创建 1GB LUKS 容器文件并安装到文件夹mountpoint-folder
,请执行以下操作:
head -c 1G /dev/zero > 1G\nsudo cryptsetup -v luksFormat 1G\nsudo cryptsetup -v luksOpen 1G container\nsudo mkfs.ext4 -v /dev/mapper/container\nsudo mount -v /dev/mapper/container <mountpoint-folder>\n
Run Code Online (Sandbox Code Playgroud)\n\n然后将文件解密到mountpont-folder
可读的位置,即使它再次加密写入磁盘。
eCryptFS 已经安装在 Linux Mint、Ubuntu 和许多其他发行版中,您可能只需要运行ecryptfs-setup-private
然后使用创建的~/Private
文件夹即可。
可能需要安装 EncFS(类似于),然后在此处或此处apt-get install encfs
查看它的手册页,类似的命令应该可以工作。encfs ~/.secret ~/decrypted
此外,EncFS 有一个巧妙的--reverse
功能,“将纯文本数据作为源并按需生成加密数据。这对于创建远程加密备份非常有用,因为您不希望本地文件保持未加密状态。 ”