非对称加密和产品密钥

时间:2020-12-26 15:23:31

标签: c# encryption-asymmetric product-key

我在实施非对称加密来为我的应用程序生成产品密钥时遇到问题。 步骤是:

  • 我创建了一个包含代码的文件(一系列字符),这取决于随机、Windows 产品密钥和卷“安装 Windows 的位置”序列号
  • 公钥对该代码进行加密
  • 用户向我发送代码
  • 我解密它并做我需要做的事情,以提供产品密钥反馈(我们将这部分称为 AZ)
  • 我用我的私钥对其进行加密并将其发送回客户/用户
  • 用户可以/想要在应用程序中插入该产品密钥(通过对话框输入),应用程序对其进行解密并检查它是否适合需要的内容。

我要解决的目标/问题是:

1.如果“非新手”打开我的应用程序并按照我所说的阅读其代码是如此简单,那么查看解密产品密钥的公钥和公式也很简单给用户,因为在代码中清楚地写了应用程序期望什么样的“产品密钥”。我的意思是,有一段 AZ 用于定义哪些值或输入应作为正确的产品密钥;

假设您希望用户输入“16”,因为他的“应用程序 ID”是“8”,而产品密钥的公式要求“用户输入的产品密钥 = ID * 2”,如果读取代码他只知道他必须根据他的 ID 输入正确的数字(如果他知道在哪里搜索,他就可以知道,所以他知道他必须写“16”)。

那么使用非对称加密有什么意义,当在代码中仍然可以跟踪预期输入时,即使您可以使用多次公钥生成自己的结果(我自己测试过:我选择了 X ^ Y % Z,结果 ^ Y % Z,结果 ^ Y % Z,我得到了 X)?

2.我遵循了教程,这些教程通常解释说要拥有一对密钥,您应该使用大素数(因此也有相关的重要密钥值);现在,我正在使用 C# 处理 WinForms,但即使使用 double 类来存储值,当公式变为“(number ^ key) % X”(X 是 2 个素数的乘积,理论上也是大数) ),您无法计算,因为如果您甚至尝试计算 2 ^ 65,它的数字太大且无法计算。事实上,为了测试非对称加密,我不得不使用与我所谓的“大数”相距甚远的值。

也许(可能?)我遗漏了一些东西,或者“大素数”不符合我的想法,对我来说,“大数”肯定超过 1k,可能超过 1k...我是否遗漏了一些关于这还是关于计算非常大的数字?

0 个答案:

没有答案