2011-08-22 26 views
1

如何可逆(对称)加密的文件名(有或无 目录路径,我没事W /任),这样的结果也是 有效的文件名(少超过64个字符[或任何限制],没有 有趣的人物,理想情况下没有空格[但不是要求]等)?可逆加密的文件名,这样的结果是有效的文件名

谷歌搜索仅找到的文件名的加密算法,其中结果是 的二进制字符的长字符串(使用MIME64,转换为 非二进制是容易的,但是这只是使文件名更长)和/或 非对称一个(例如盐腌的MD5,SHA1,DES, 等)。我不想存储哈希表:我想用我记忆的简单密钥来解密 文件名。

我自己尝试使用诸如“mcrypt -b”之类的东西也失败了:产生的 输出(甚至在转换为ASCII之前)非常迅速地增长,因为文件名和密钥长度增加了 。推荐:我打算使用“无限备份”服务(如mozy,blazebackup等),但没有加密文件名(仅文件 内容)。我将创建一个由加密文件名 组成的目录,其中包含符号链接(甚至是硬链接)。我将仅备份该目录(并选择我自己的私钥) ,并且有 文件名加密和文件内容加密备份。

编辑:皮蒂的方法工作就像一个魅力!

# "-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

等一下,我只是用我的私钥加密,这样任何人瓦特/我的公钥可以看了吗? – barrycarter

+1

这正是[格式保留加密](https://secure.wikimedia.org/wikipedia/en/wiki/Format_Preserving_Encryption)的工作。 –

+0

这听起来很有趣。是否有任何这些方法的开源Linux实现? – barrycarter

回答

1

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

不知道是否有任何免费软件可以做到这一点。如果你不想自己编写程序,我会用.Net为你做(只需支付少许费用)。

+0

为什么在简单对称算法足够的情况下使用RSA?另外,我确定你无法记住一个RSA私钥:-) –

1

你需要加密的强度有多大?您可以使用经典的基于字母的密码之一,如Vigenère,它们将严格按字母输出,但如果您希望将有效的文件名作为输出,它将无法很好地处理非字母数字字符。结果仍然会有“/”和“。”。他们之前在哪里。

0

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

更重要的是,当名称列表既是已知的,也是以预定的顺序时,更容易对错误文件名进行错误检测。

[发布为CW,因为这实在是一个多回答一个评论]

+0

我试过这个w /一个单独的地图,它变得很难看。例如,如果您将地图存储在sqlite3中,则添加一个文件会更改db以至于rsync无用。我想平面文件可能会工作...重新添加一个标题,然后我需要有每个文件的2个副本。我希望能够使用聪明的符号链接来避免这种情况。 – barrycarter

+0

对于标题,您可以使用管道,ala'cat plainfile | addHeader | encrypt> encfile',其中encfile可以是任何你想要的(例如,可以稍后重命名为fileNNNN)和'decrypt encfile | writeFile'(writeFile删除头并保存到一个特定的文件名)。无可否认,这是一些额外的编码。 – Iterator

+0

好的,但普通文件是我经常使用的文件,所以经常加密/解密似乎效率低下。现在,如果有人写了一个FUSE模块来做到这一点,他们可能会有一些东西。 – barrycarter

相关问题