可逆地加密文件名,以便结果是有效的文件名

时间:2011-08-22 15:02:20

标签: encryption cryptography

如何可逆地(对称地)加密文件名(使用或 没有目录路径,我很好(或者),所以结果也是一个 有效的文件名(少于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个字符的结果,应始终是文件名!

3 个答案:

答案 0 :(得分:1)

您可以使用RSA密钥对执行此操作。生成rsa密钥对和证书,然后将其导入您的证书库。使用公钥加密您的文件名,然后base64编码结果。 ntfs的最大文件名长度为255个字符,因此1024位RSA密钥应该没问题,如果需要更短的文件名,请使用512位密钥。当您要解密文件名时:base64解码加密文件名,然后使用私钥解密回实际文件名。

不确定是否有可用的免费软件。如果您不想自己编写程序,我会在.Net中为您编写(收取少量费用;)。

答案 1 :(得分:1)

您需要加密多强?你可以使用一个基于经典字母的密码,例如Vigenère,它将产生严格的字母输出,但如果你想要一个有效的文件名作为输出,它将不能很好地处理非字母数字字符。结果仍然是“/”和“。”他们以前在哪里。

答案 2 :(得分:0)

如果您非常关注安全性,值得注意的是,高熵文件名可能比“file000001”,...“fileNNNNNNN”更受关注。从fileNNNN映射到正确名称的单独文件可以单独加密,并在多个位置重复存储。这两种方法都泄露了有关原始文件名的零信息。或者,您可以为每个加密文件名的未加密文件添加一个短标题,从而省去一个单独的索引。

此外,当名称列表已知并且按预先确定的顺序时,能够对损坏的文件名进行错误检测更加容易。

[发布为CW,因为这实际上更多的是评论而不是答案。]