我有一个包含多个文件的文件夹:
file1
file2
file3
我想使用 AES 对它们全部进行加密,包括文件名,因此输出应该是这样的:
kjk437fjk437
3k4jn34jk
j34nkj34
但我根本不想应用任何压缩。
可以使用 7zip 实现此目的吗?我正在使用 Debian 并且只寻找基于终端的解决方案。
编辑:我也希望能够在解密后恢复文件名。
答案1
您可能只是想隐藏文件名而不是加密它,因此应该执行如下操作:
for file in ./*;do
7z a $RANDOM-$RANDOM.7z -m1=copy -mhe -psecret "$file";
rm "$file"
done
-m1=copy
表示使用复制方法,因此不压缩。
-mhe
表示加密标头,因此没有密码就无法查看 7z 文件内的文件名。
-psecret
将密码设置为secret
答案2
7zip 是必须的吗?选择正确的工具。加密文件系统好像是的。
- 安装它。在 Debian 中:
apt-get install encfs
。 创建两个目录:
mkdir encrypted mountpoint
。运行该工具:
encfs "$PWD/encrypted" "$PWD/mountpoint"
请注意,您需要
$PWD/
而不是,./
因为encfs
不接受相对路径(除非-f
使用)。按照指示选择加密、密码。
将要加密的所有目录和文件复制或移动到
./mountpoint
。加密的目录和文件将出现在./encrypted
目录中。卸载:
fusermount -u ./mountpoint
您现在可以复制/移动/重命名/tar/任何./encrypted
目录整体而言。请注意,里面有一个隐藏.xml
文件。该文件包含(受密码保护的)密钥,这至关重要,因此不要丢失它。可以单独存储该文件(阅读ENCFS6_CONFIG
中的变量man 1 encfs
)。
要访问原始文件,请重复步骤 3,提供正确的密码。处理所选挂载点下的文件:读取、添加、删除、修改,一切皆有可能。最后,像fusermount -u
步骤 6 中一样卸载。
笔记:
encfs
是 FUSE(用户空间中的文件系统)。请参阅为什么 FUSE 在服务器上可能被认为不安全?- 还有EncFS 特定的安全问题。
答案3
您可以对文件夹进行两次加密以隐藏文件名:
type="zip"; file="your-folder"; password="your-password"; # You also could use other formats.
7z a -t"$type" "$file.$type" -p"$password" "$file"
7z a -t"$type" "$file.$type.$type" -p"$password" "$file.$type"
那么这个文件"your-folder.zip.zip"
就是你想要的了。