2013-03-04 87 views
3

我想将文件存储在共享Web服务器上,但希望隐藏该文件的内容。我将加密文件的内容,但我很清楚,如果有人有时间和知识,他们可以根据他们的名字来定位这些文件。加密/混淆文件名

什么是加密文件名或混淆它的最佳方法?

我看过创建一个单独的索引文件,并使用一个字典来存储原始和混淆的文件名,但如果我可以使用可逆加密,可能更容易/不太容易发生灾难,如果索引文件是丢失。

希望是有道理的。

更新: 要清楚我想这是可逆的,我想确保文件不能在驱动器上搜索(即混淆路径是不够的)。

+0

也许你可以做同样的指数的想法,但使用SQL? – Simon 2013-03-04 15:02:13

+0

使用查找表。如果您对其进行加密以便能够解密,则其他人也可以执行相同的操作。 – 2013-03-04 15:03:23

+0

SQL的问题在于分配的数据库非常小,小于100mb,这足以启动,但不会很长时间,否则这就是我所要做的。 – 2013-03-04 15:21:16

回答

3

你可以给url添加一个随机值。例如:

http://example.com/my-site/943hfkl3w7/SecretFile.zip 
http://example.com/my-site/jf6490fh40/OtherFile.zip 

这样,原来的文件名是从来没有改变过和文件位置都没有猜到的。

+0

这假定这些文件应该是可公开评估的。如果没有,那么解决方案是将文件存储在可公开访问的文件夹之外。 – Greg 2013-03-04 15:22:00

+0

我对此的担忧是托管服务提供商理论上可能会在驱动器中搜索文件名或部分文件名(即银行详细信息)。还有一个问题是要知道文件在哪个文件夹中,但我想我可以散列原始文件夹名称以获取值。 – 2013-03-04 15:24:21

+0

@Andy Lord - 这改变了我对你的问题的理解。你应该在上面的问题中指出这一点。 – Greg 2013-03-04 15:41:40

0

比如,你可以使用基于密钥的RSA加密您之前已经生成:

var provider = new System.Security.Cryptography.RSACryptoServiceProvider(); 
provider.ImportParameters(RSA_KEY); 

var encryptedBytes = provider.Encrypt(System.Text.Encoding.UTF8.GetBytes("Hello World!"), true); 

string decryptedTest = System.Text.Encoding.UTF8.GetString(provider.Decrypt(encryptedBytes, true)); 
+0

对于大文件,RSA加密尤其具有非常差的性能 – Tearsdontfalls 2013-03-04 15:07:10

+0

这是否适用于文件名?我不需要做一些额外的工作来说明特殊字符等吗? – 2013-03-04 15:17:37

+0

Tearsdontfalls:只加密文件名就没关系,你不觉得吗? :/ – 2013-03-04 15:33:31