C# 如何保护App.Config windows窗体应用程序?

C# 如何保护App.Config windows窗体应用程序?,c#,winforms,security,C#,Winforms,Security,我有一个windows窗体应用程序,我想尝试销售 为了工作,应用程序需要一个从在线API服务X生成的ApiKey和ApiSecret 我的想法是: 想要购买应用程序的人,在我的网站上注册,在那里插入他们的个人详细信息,只包括以前从ServiceX生成的ApiKey 一旦我收到他们的数据和付款,我就创建一个个人版本的软件,该软件在程序的App.config中内置了ApiKey,并向他们发送该软件的编译版本(.exe) 一旦他们收到自己的程序,他们将插入ApiSecret并使用它,ApiSecret

我有一个windows窗体应用程序,我想尝试销售

为了工作,应用程序需要一个从在线API服务X生成的ApiKey和ApiSecret

我的想法是:

想要购买应用程序的人,在我的网站上注册,在那里插入他们的个人详细信息,只包括以前从ServiceX生成的ApiKey

一旦我收到他们的数据和付款,我就创建一个个人版本的软件,该软件在程序的App.config中内置了ApiKey,并向他们发送该软件的编译版本(.exe)

一旦他们收到自己的程序,他们将插入ApiSecret并使用它,ApiSecret将保存在App.Config中,并且仅当两者匹配时才允许用户访问服务API

这种推理适合这种应用吗

我还希望ApiKey是完整性安全的:我不希望拥有该程序版本的人能够更改ApiKey并将其传递给其他没有为该服务付费的人

(我应该使用加密吗?如果是,如何使用?)

我认为ApiSecret一旦被用户保存,也应该被加密,以避免人们在未经授权的情况下发现程序版本来访问购买应用程序的用户的服务

我如何保证这一点?而且,我制造了所有这些问题,因为我读到可以从.exe文件访问App.Config的部分,这是真的吗


该应用程序还有一个数据库,我是否也应该在app.config中加密connectionstring?

你在应用程序中存储的所有内容都可以由一个积极的逆向工程师透露。我知道这一点,但我想尽量避免让他做得太简单。我知道我可以使用模糊器,这会让他觉得事情变得更困难。但是这种应用程序的性能更重要,所以不能依赖于它们。如果你发送的密钥以任何方式被盗用,你已经丢失了,一个有动力的用户将能够破解你的程序。不仅如此,他们还可以从一台电脑复制到另一台电脑,并且可以随意使用,你甚至可以卖掉一本。我会在您自己的服务器中保持密钥的私密性,并使程序成为它的客户机,而您的服务器自己进行API调用。通过这种方式,访问控制完全取决于您。对于调用API,我将提供一种方法,供用户(通过应用程序或网站)基于密钥和机密生成签名令牌。应用程序应该通过令牌进行身份验证,以便可以撤销。我不会让应用程序直接连接到数据库,而是通过API强制所有调用。如果数据库连接字符串在用户手中,则没有简单的加密方法。因此,最好的方法可能是创建一个Web服务器,让用户通过winform app对其进行身份验证,然后在windows form app中询问登录用户的ApiKey是否正确,最后通过设置ApiSecret让他们使用该程序?