C# 如何保护加密密钥

C# 如何保护加密密钥,c#,security,encryption,dll-injection,C#,Security,Encryption,Dll Injection,我有一个应用程序,将由不同的用户使用,当用户开始使用该应用程序时,它将生成一个在安装位置加密的许可证文件,每次应用程序运行时,它将解密该文件,将验证所有参数,并根据验证结果更新其中的几个参数,并将加密更新的文件 这里有一个真正让人痛苦的问题,每次应用程序运行时,它都需要加密密钥aes来加密和解密,并且密钥是在我的.NET dll中硬编码的。因此,用户有可能提取密钥并更改许可证参数以运行应用程序 所以我关心的是如何保护文件不被篡改? 有没有什么方法可以将一些重要的许可证参数放到其他位置,而不是保存

我有一个应用程序,将由不同的用户使用,当用户开始使用该应用程序时,它将生成一个在安装位置加密的许可证文件,每次应用程序运行时,它将解密该文件,将验证所有参数,并根据验证结果更新其中的几个参数,并将加密更新的文件

这里有一个真正让人痛苦的问题,每次应用程序运行时,它都需要加密密钥aes来加密和解密,并且密钥是在我的.NET dll中硬编码的。因此,用户有可能提取密钥并更改许可证参数以运行应用程序

所以我关心的是如何保护文件不被篡改? 有没有什么方法可以将一些重要的许可证参数放到其他位置,而不是保存在文件中? 如何确保加密密钥的安全,防止欺诈活动? 应用程序完全处于脱机状态

请给我你宝贵的建议和见解


提前感谢

无法保护在.net中编写的脱机应用程序。你不能在别人的机器上合理地隐藏秘密。您需要提供一个您控制的位置,即web服务端点来存储这些机密。无论从哪个角度看,应用程序的用户都在他们的环境中拥有所有的逻辑和数据;你给了他们锁和钥匙,只是希望他们没有毅力用钥匙打开锁

或者,正如本周在另一个线程上建议的那样,您可以用VB6编写文件访问逻辑和密钥,并对其进行互操作调用—VB6可以反编译,但很难。然而,有人可能只是拿起系统内部,观察您的文件IO发生并推断出您的机密所在的文件或注册表项。如果它的AES加密,这将使他们很难,但他们会知道哪个进程正在打开它。。。因此,他们现在有了反编译代码的目标。破解它不是小事,但我也不认为它是安全的


防止用户在自己的电脑上访问数据的唯一方法是不要将数据放在电脑上。

使用加密狗。如果用户可以控制应用程序的执行,则无法完全控制应用程序。