加密/混淆文件名

3
我希望能够将文件存储在共享网络服务器上,但是希望隐藏文件的内容。我将加密文件的内容,但我非常清楚,如果有人有时间和知识,他们可以根据文件名来定位文件。
最好的方法是加密文件名或混淆文件名?
我已经尝试创建一个单独的索引文件,并使用字典来存储原始和模糊不清的文件名,但如果我可以使用可逆加密来做同样的事情,那可能会更容易/ less prone to disaster if the index file is lost.
希望这样说的话都是有意义的。
更新: 明确一下,我希望它是可逆的,并且我希望确保文件在驱动器上不可搜索(即混淆路径是不足够的)。

也许你可以使用SQL来实现相同的索引思路? - Simon
使用查找表。如果您加密以便解密,则其他人也将能够执行相同的操作。 - Ash Burlaczenko
SQL的问题在于分配的数据库非常小,不到100MB,这足以让你开始使用,但长期来看并不可行,否则我早就这么做了。 - Andy Lord
2个回答

3
您可以将一个随机值添加到URL中。例如:
http://example.com/my-site/943hfkl3w7/SecretFile.zip
http://example.com/my-site/jf6490fh40/OtherFile.zip

通过这种方式,原始文件名永远不会改变,并且文件位置不可猜测。


这假设文件应该是公开可访问的。如果不是,那么解决方案就是将文件存储在不公开访问的文件夹之外。 - Greg
我对此的担忧是,托管提供商理论上可以搜索驱动器以查找文件名或文件名的一部分(即银行详细信息)。还有一个问题是知道文件在哪个文件夹中,但我想我可以对原始文件夹名称进行哈希处理以获取值。 - Andy Lord
@Andy Lord - 这改变了我对你问题的理解。你应该在你上面的问题中指出这一点。 - Greg
1
我在标题中提到了文件名,但还是谢谢你的建议。 - Andy Lord

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));

RSA加密在处理大文件时性能非常差。 - Tearsdontfalls
这对文件名起作用吗?我不需要额外的工作来考虑特殊字符等事项吗? - Andy Lord
Tearsdontfalls:仅加密文件名,这样可以吗? :/ - Emmanuel Istace
Andy Lord:不要认为你必须关心特殊字符,但是也许我真的没有理解你的疑问?但对于我来说,你只需要加密一个字节数组,然后得到其字符串表示形式。如果您担心加密结果中的特殊字符,可以将加密的字节数组格式化为十六进制。只用1到9和A到F。 - Emmanuel Istace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接