这只是一个一般性的设计问题。我正在设计一个小应用程序,需要以分层方式存储文件 例如:
dept/group/user1/file#1
dept/group5/user2/file#7
用户名也可以包含“/”,“@”等字符。
使用用户名作为目录名称是明智的还是我应该在每个组下维护一个映射文件,将每个用户名映射到简化的通用目录名,即
user1=dir1
user7=dir7
答案 0 :(得分:1)
虽然有些人建议对您的用户名进行哈希处理,但这对于检查来说是不透明的(因此您无法通过检查文件系统来判断与目录对应的用户名是什么)并且是不可逆的(所以既不是人类系统管理员也不是软件可以通过查询文件系统来枚举用户名。因此,它可能适用于您,也可能不适合您。
我建议对用户名进行编码。通过使用MIME中使用的两种主要内容编码来激励自己,我可以建议引用可打印或 base64 吗?
使用 quoted-printable ,您可以对用户名中的所有“异常”字节进行编码,同时保留大部分可打印字符。这样,在使用ls
检查目录时,用户名的含义仍然相当明显。您应该至少编码所有控制字符(值为0到31之间的字节以及127), = , / ,以及所有对shell特殊的字符(像空格,引号, $ ,#等...)。 quoted-printable的缺点是如果期望用户名包含许多这些不寻常的字符,则文件名可能会变得很长:每个编码序列占用3个字节。
Base64 是一种比quoted-printable更紧凑的编码,以防用户名可能包含大量需要编码的字符,但它不能立即读取对于人类,所以目录的ls
看起来不太清楚。请注意,您必须修改标准base64的最后一个字符,例如将字母表的最后一个字符从 / 更改为 - like this,否则编码字符串可以包含 / 。