2013-03-04 86 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