C# 对许可证文件使用非对称加密

C# 对许可证文件使用非对称加密,c#,encryption,encryption-asymmetric,C#,Encryption,Encryption Asymmetric,我想向客户端发送一个加密文件,其中包含我的应用程序的许可证数据。由于我将使用非对称加密,因此我将使用私钥加密文件并将其发送到客户端。客户端pc上的应用程序将使用应用程序代码中的公钥对发送的文件进行解密 这里的威胁模型I方面是,可以从应用程序.dll文件中提取公钥(例如使用.net reflector),并用于重新生成许可证 那么,有没有办法保护我的应用程序 更新: 我在下面介绍了xml文件加密的代码示例 我现在面临的问题是,根据代码示例,两个密钥都将在与我相同的客户端pc中生成。这是对的还是我有

我想向客户端发送一个加密文件,其中包含我的应用程序的许可证数据。由于我将使用非对称加密,因此我将使用私钥加密文件并将其发送到客户端。客户端pc上的应用程序将使用应用程序代码中的公钥对发送的文件进行解密

这里的威胁模型I方面是,可以从应用程序.dll文件中提取公钥(例如使用.net reflector),并用于重新生成许可证

那么,有没有办法保护我的应用程序

更新:

我在下面介绍了xml文件加密的代码示例

我现在面临的问题是,根据代码示例,两个密钥都将在与我相同的客户端pc中生成。这是对的还是我有误解


同样,正如Alexe Barlescu建议使用ProtectedData类来保护私钥一样,如何实现这一点?

非对称加密使用两个密钥:

  • 用于加密数据的公钥
  • 用于解密数据的私钥
使用客户端的公钥对包含许可证的文件进行加密,以便只有客户端才能使用其私钥对其进行解密。
要使客户端的私钥安全,请使用System.Security.Cryptography命名空间中ProtectedData类中的Protect方法对其进行加密。私钥将被加密存储在他的计算机上,他只有在需要解密您发送的消息时才能解密密钥

您不能仅使用公钥重新生成许可证。考虑利润对你的应用程序的成本被黑客攻击你(开发人员)和黑客。如果损失太大,只需使用现有库中的一个,否则您的方案听起来不错。顺便说一句,你所描述的是数字签名,不是加密谢谢你的回答,但是你能解释一下我所描述的数字签名是什么意思吗?非对称加密是当使用公钥时,只有私钥才能读取数据。数字签名是指私钥用于加密某些东西(通常只是散列),公钥让每个人都可以检查消息的来源-在这种情况下没有隐藏任何内容,因为公钥让每个人都可以看到真实的数据谢谢,这解释了为什么我无法通过web找到一个很好的示例。当我第一次使用对称加密时,我发现使用.net reflector可以很容易地从dll文件中提取密钥。