C# 非对称加密&;产品密钥

C# 非对称加密&;产品密钥,c#,encryption-asymmetric,product-key,C#,Encryption Asymmetric,Product Key,我在实现非对称加密以生成应用程序的产品密钥时遇到问题。 步骤如下: 我创建了一个文件,其中包含一个代码(一系列字符),具体取决于随机数、windows产品密钥和卷“安装windows的位置”序列号 公钥加密该代码 用户向我发送代码 我解密它并做我需要的事情,以提供产品密钥反馈(我们将此部分称为AZ) 我用私钥对其进行加密,并将其发送回客户/用户 用户可以/希望在应用程序中插入该产品密钥(通过对话框输入),应用程序将其解密并检查其是否符合需要 我要解决的目标/问题是: 1.如果一个“非新手”打

我在实现非对称加密以生成应用程序的产品密钥时遇到问题。 步骤如下:

  • 我创建了一个文件,其中包含一个代码(一系列字符),具体取决于随机数、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^65,它也是一个太大的数字,无法计算。事实上,为了测试非对称加密,我必须使用远离我所谓的“大数字”的值


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

安全非对称加密是使用128位的数字完成的(至少使用ECDSA…)它们是如此之大以至于你甚至无法想象它们:-)好的,那么在C#中你是如何做到这一点的呢?我的意思是使用128位数字。通常非对称加密库使用特殊的大数字子库来进行大数字运算。。。.NET的
biginger
类就足够了(即使不是很快也不是很优化)。现在谢谢你,我会检查库,我不是这方面的专家。安全非对称加密是用128位的数字完成的(至少用ECDSA…),它们太大了,你甚至无法想象它们:-)好的,在C中你是怎么做到的?我的意思是使用128位数字。通常非对称加密库使用特殊的大数字子库来进行大数字运算。。。.NET的
biginger
类就足够了(即使不是很快也不是很优化)。现在谢谢你,我会检查库,我不是它们的专家