c#,如何存储和检查生成的许可证密钥?

c#,如何存储和检查生成的许可证密钥?,c#,ssl,encryption,cryptography,C#,Ssl,Encryption,Cryptography,我读了很多关于RSA、加密、许可证密钥等的书,但我仍然感到困惑 我们有一个可以由客户在本地安装的web应用程序(他们通常应该选择SaaS版本,但有些人可能不需要) 该应用程序有不同的模块等(相当标准) 我们的后端存储客户数据和许可证/购买的模块,并可通过SSL访问 “客户端”将定期检查已颁发的许可证是否仍然有效 我不清楚的是如何存储许可证密钥和/或数据,如“许可证有效期有多长” 到目前为止,我的想法是: 只需将其保存在表(明文)中,即使用户篡改数据库中的数据,定期的许可证检查也可以确保许可证的

我读了很多关于RSA、加密、许可证密钥等的书,但我仍然感到困惑

我们有一个可以由客户在本地安装的web应用程序(他们通常应该选择SaaS版本,但有些人可能不需要) 该应用程序有不同的模块等(相当标准)

我们的后端存储客户数据和许可证/购买的模块,并可通过SSL访问

“客户端”将定期检查已颁发的许可证是否仍然有效

我不清楚的是如何存储许可证密钥和/或数据,如“许可证有效期有多长”

到目前为止,我的想法是:

  • 只需将其保存在表(明文)中,即使用户篡改数据库中的数据,定期的许可证检查也可以确保许可证的有效性。(用户可能有权访问短时间内不应访问的部件)

  • 对其进行加密并保存在表中。这意味着我

    • 使用共享密钥

    • 使用私钥/公钥:因此必须使用公钥(在客户端上)进行解密,或者将其发送到后端进行解密并将其发送回客户端

我只是觉得加密整个东西是一项开销

我不是安全和/或密码方面的专家

所以我的问题是

  • 检查/存储许可证(及其数据)时的最佳做法是什么
谢谢

编辑:


我在最后一段中删除了“SSL是否足够?”的问题,因为我意识到这是一个不同的主题。

我假设,您在本地拥有许可证文件,并且只在客户端进行检查?您可以执行以下操作:

  • 在服务器上生成许可证文件(无论您想要什么格式,甚至可以是纯文本)
  • 使用您的私钥对此文件进行签名(无需加密,只需附加签名)
  • 在应用程序中包含许可证、签名和公钥(或使其可下载以更新/撤销许可证)
  • 检查许可证文件时,只需使用公钥检查签名。如果客户端篡改了许可证文件,签名将无法验证
  • 当然,您必须以某种方式保护您部署的公钥,这样客户端就不能用自己的公钥替换它并创建自己的许可证文件


    例如,对于XML,您可以使用

    谢谢,这意味着创建我自己的私钥/公钥加密实现(例如RSA),对吗?或者我需要一些证书(比如X509)?或者我会/可以/应该使用安装在后端的SSL证书吗?您所说的“您自己的实现”是什么意思?当然.net包含pk加密/签名类(例如RSA),但您需要一个密钥对来使用它们。例如,请参见[这个问题][这是我用一种相当笨拙的方式表达的意思;)我可以将SSL证书与其公钥/私钥一起使用吗?对不起,我不知道您是否可以或如何从证书中导出密钥,以便在这种情况下可用