如何可逆地(对称地)加密文件名(使用或 没有目录路径,我很好(或者),所以结果也是一个 有效的文件名(少于64个字符[或任何限制],不 有趣的人物,理想情况下没有空间[但不是要求],等等)?
Google搜索仅查找结果所在的文件名加密算法 一长串二进制字符(使用MIME64,转换为 非二进制很容易,但这只会使文件名更长)和/或 非对称单向加密方案(例如,盐渍MD5,SHA1,DES, 等等)。我不想存储哈希表:我想要解密 我记住了一个简单的密钥的文件名。
我对“mcrypt -b”这样的事情的尝试也失败了:结果 输出(甚至在转换为ASCII之前)的增长速度非常快 文件名和密钥长度增加。
推理:我计划使用“无限备份”服务(如mozy, blazebackup等),但没有加密文件名(只是文件 内容)。我将创建一个由加密文件名组成的目录 使用符号链接(甚至是硬链接)到真实文件。我只会备份 那个目录(并选择我自己的私钥),并有 文件名加密和文件内容加密的备份。
编辑:Petey的方法就像一个魅力!# "-b 512" yields "Bits has bad value 512 (too small)"
ssh-keygen -t rsa -b 768 -f /tmp/test.rsa
echo "thisisareallylongfilenameknightswhosayniioratleastusedto" |\
openssl rsautl -inkey /tmp/test.rsa -encrypt | base64 |\
perl -0777 -pnle 's/\//-/isg;s/\n//isg'
产生130个字符的结果,应始终是文件名!
答案 0 :(得分:1)
您可以使用RSA密钥对执行此操作。生成rsa密钥对和证书,然后将其导入您的证书库。使用公钥加密您的文件名,然后base64编码结果。 ntfs的最大文件名长度为255个字符,因此1024位RSA密钥应该没问题,如果需要更短的文件名,请使用512位密钥。当您要解密文件名时:base64解码加密文件名,然后使用私钥解密回实际文件名。
不确定是否有可用的免费软件。如果您不想自己编写程序,我会在.Net中为您编写(收取少量费用;)。
答案 1 :(得分:1)
您需要加密多强?你可以使用一个基于经典字母的密码,例如Vigenère,它将产生严格的字母输出,但如果你想要一个有效的文件名作为输出,它将不能很好地处理非字母数字字符。结果仍然是“/”和“。”他们以前在哪里。
答案 2 :(得分:0)
如果您非常关注安全性,值得注意的是,高熵文件名可能比“file000001”,...“fileNNNNNNN”更受关注。从fileNNNN映射到正确名称的单独文件可以单独加密,并在多个位置重复存储。这两种方法都泄露了有关原始文件名的零信息。或者,您可以为每个加密文件名的未加密文件添加一个短标题,从而省去一个单独的索引。
此外,当名称列表已知并且按预先确定的顺序时,能够对损坏的文件名进行错误检测更加容易。
[发布为CW,因为这实际上更多的是评论而不是答案。]