如何在C#中编写一个"真正的"私有方法?

Ale*_*ung 4 c# reflection truecrypt private-methods

实际上,私有方法是在C#中实现的,仍可以使用它进行搜索Reflection.

我要做的是编写public string Encrypt(string data)private string Decrypt(string cipher)执行加密和解密的方法.

不幸的是,如果有人知道.NET框架,他可以Reflection用来查找Decrypt方法并解密所有加密的东西.

似乎不那么安全.所以我想把Decrypt方法变成真正的私有方法.

但是怎么做呢?


更新日期:2012年1月9日下午10:52悉尼时间

bdares提供了这个问题的技术解释

Eric Lippert提供了这个问题的政治解释

谢谢两位专家!

小智 16

你不能.如果攻击者可以访问您的代码,编译或源代码,他可以跟踪您的程序并找到加密或解密的位置.

您可以通过将密钥存储在单独的位置来添加一层安全性,但通常如果攻击者正在您的服务器上执行代码,那么您已经搞砸了.

(如果攻击者在您的服务器上执行代码,您只会担心这一点,因为否则该方法是否为私有无关紧要.此外,他不能使用反射来查找方法名称,除非他正在执行代码你的服务器. 简而言之:你在这里担心错误的事情.)

  • 好点.你也可以说'private`不是安全概念.我认为这是一种常见的误解. (2认同)
  • @AlexYeung:"真正安全"**对抗威胁**?你可以制作真正安全的节目; 当你对他们*威胁*的攻击者的*成本*高于他们通过成功攻击获得的*效益*时,你这样做.描述成功攻击的威胁和好处,然后才能将安全系统设计为响应. (2认同)

Eri*_*ert 15

你的根本问题是你的信任模型错了.如果有人可以使用反射,那么他们就是用户.您是软件提供商.你为他们工作. 信任来自他们,而不是来自你.他们是谁拥有信任的人,你,而不是你他们.

如果您不信任该用户,那么首先不要将它们出售给您.不要向那些你认为打算攻击你的人出售武器.

  • @ChrisWue:这些措施和锁车门一样有效.汽车一直被盗,被锁定; 车门锁保留了那些不想偷车的老实人.在我的时间里取代了一些破窗户,我不再锁车了.它不是针对威胁的有效安全措施. (5认同)