【问题标题】:Encrypt/Obfuscate file name加密/混淆文件名
【发布时间】:2013-03-05 00:29:15
【问题描述】:

我想将文件存储在共享网络服务器上,但想隐藏文件的内容。我将对文件的内容进行加密,但我非常清楚,如果有人有时间和知识,他们可以根据他们的名字来定位文件。

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

我已经研究过创建一个单独的索引文件并使用字典来存储原始文件名和经过混淆的文件名,但是如果我可以使用可逆加密来做同样的事情,那么如果索引文件丢失,可能会更容易/更不容易发生灾难.

希望这是有道理的。

更新: 需要明确的是,我希望这是可逆的,并且我想确保文件在驱动器上不可搜索(即混淆路径是不够的)。

【问题讨论】:

  • 也许你可以做同样的索引想法,但使用 SQL?
  • 使用查找表。如果您对其进行加密以便能够解密,那么其他人也可以这样做。
  • SQL 的问题是分配的数据库非常小

标签: c# encryption obfuscation


【解决方案1】:

您可以在 url 中添加一个随机值。例如:

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

这样原始文件名永远不会改变,文件位置也无法猜测。

【讨论】:

  • 这假定文件应该是可公开评估的。如果没有,那么解决方案是将文件存储在可公开访问的文件夹之外。
  • 我担心的是托管服务提供商理论上可以在驱动器中搜索文件名或文件名的一部分(即银行详细信息)。还有一个问题是知道文件在哪个文件夹中,但我想我可以散列原始文件夹名称以获得一个值。
  • @Andy Lord - 这改变了我对你问题的理解。您应该在上面的问题中指出这一点。
  • 我确实在标题中提到了文件名,但还是感谢您的建议。
【解决方案2】:

例如,您可以根据之前生成的密钥使用 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 : 不要以为你必须关心特殊字符,但也许我真的没有得到你的询问?但对我来说不,你只是加密一个字节数组,然后你得到它的字符串表示。如果您害怕加密结果中的特殊字符,您可以将加密的字节数组格式化为十六进制。仅限 1 到 9 和 A 到 F。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多