【问题标题】:c#, how to store and check a generated license key? [closed]c#,如何存储和检查生成的许可证密钥? [关闭]
【发布时间】:2016-07-11 21:41:45
【问题描述】:

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

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

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

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

我不太清楚如何存储许可证密钥和/或“许可证有效期”等数据

到目前为止我的想法:

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

  • 加密并保存在表格中。这意味着我要么

    • 使用共享密钥

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

我只是觉得加密整个事情是一种开销。

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

所以我的问题是

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

谢谢。

编辑:

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

【问题讨论】:

    标签: c# ssl encryption cryptography


    【解决方案1】:

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

    1. 在服务器上生成许可证文件(无论你想要什么格式,甚至可以是纯文本)
    2. 使用您的私钥签署此文件(无需加密,只需附上签名)
    3. 在您的应用中包含您的许可证、签名和公钥(或使其可下载以便能够更新/撤销许可证)
    4. 检查许可证文件时,只需使用您的公钥检查签名。如果客户端篡改了许可文件,签名将无法验证。

    当然,您必须以某种方式保护已部署的公钥,因此客户端无法用自己的公钥替换它并创建自己的许可证文件。

    例如,使用 XML,您可以使用 XML Signature

    【讨论】:

    • 谢谢,这意味着创建我自己的私钥/公钥加密(例如 RSA)实现,对吗?还是我需要一些证书(比如 X509)?
    • 或者我会/可以/应该使用安装在后端的 SSL 证书吗?
    • “你自己的实现”是什么意思?当然 .net 包括用于 pk-encryption/signing 的类(例如 RSA),但您需要一个密钥对才能使用它们。参见例如[这个问题][stackoverflow.com/questions/28099187/…
    • 这就是我用一种相当笨拙的方式表达的意思;)我可以为此使用我的 SSL 证书及其公钥/私钥吗?
    • 抱歉,我不知道您是否或如何从您的证书中导出密钥以便在这种情况下使用
    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 2011-09-23
    • 2012-02-29
    • 2011-03-01
    • 2022-03-21
    • 2011-08-15
    • 2011-08-26
    • 2011-02-24
    相关资源
    最近更新 更多