问题标签 [product-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
123 浏览

c# - 非对称加密和产品密钥

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

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

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

1.如果“不是新手”打开我的应用程序并阅读它的代码如此简单,就像我被告知的那样,那么查看我给用户的解密产品密钥的公钥和公式是什么也很简单,因为在代码中清楚地写了应用程序期望的“产品密钥”类型。我的意思是,有一段 AZ 用于定义预期哪个值或输入是正确的产品密钥;

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

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

2.我按照教程通常解释了让你的一对键你应该使用大素数(因此也相关的大键值);现在,我正在使用 C# 开发 WinForms,但即使使用双类来存储值,当公式到达“(数字 ^ 键)% X”(是 X 是 2 个素数的乘积,理论上也是大数),您无法计算,因为如果您尝试计算 2 ^ 65,它的数字太大,无法计算。事实上,为了测试非对称加密,我不得不使用与我所说的“大数”相距甚远的值。

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