在 .NET 中对程序集进行签名涉及公钥/私钥对。据我所知,.NET 使用 RSA 算法和私钥对程序集进行签名,并使用嵌入的公钥对其进行检查。
我知道如何检索公钥 ( Assembly.PublicKey
)。我想知道,是否可以使用该密钥来解密包含一些用私钥加密的数据的短字符串。
到目前为止我读过的文档(例如)似乎暗示只有相反的方式是可能的:我必须使用公钥加密和私钥解密 - 但我真的不想包括在大会上,我做。
我想没关系,如果我只是签署了字符串。但是怎么做?
我有点不知所措如何开始。有人有代码片段吗?
此外,理想情况下,小字符串的加密/签名将在 PHP 中进行,因为我想将其卸载到 Web 服务器,而到目前为止我们所拥有的只是您的通用 PHP/MySQL 托管网站。
用例:我正在尝试为我们即将发布给 beta 测试人员的软件提出一个轻量级的许可方案。由于该软件可能是免费软件,我们真正想要实现的是
- 知道谁安装了软件(电子邮件地址)
- 让软件在给定期限后过期,之后用户必须获得新的许可证
- 这就像填写表格并等待带有密钥的自动电子邮件到达一样简单
- 我们正在努力减少旧版本回来损害我们声誉/困扰我们的可能性
能够加密元组(到期日期、指纹)并在启动时对其进行解密将使许可模块变得简单:第一次启动应用程序时,会要求用户提供电子邮件地址、姓名、组织。此信息与一些系统信息(nic、计算机名称、程序集主要和次要版本)的 md5 指纹一起发布到网络服务器。网络服务器通过电子邮件回复(检查电子邮件地址的有效性),并使用加密版本的元组(到期日期、指纹),然后将其保存到磁盘。在启动时,可以将其解密并与当前日期和重新生成的指纹进行比较。
编辑:好的,所以我还没有我的问题的所有答案。但看起来 .NET 不会让使用私钥进行加密变得容易(如果可能的话,答案并不真正同意这一点)。
我将采取的路线是这样的(基于我的用例):
- 我将使用私钥签署许可证。
- 我将使用公钥来验证许可证是否由私钥签名
- 我将发布另一个针对 PHP 开发人员的问题,关于如何使用 .NET 密钥(由 生成
sn.exe
)来签署一些文本 - 我并不真的担心用户看到许可证,因为它无论如何都是一个哈希值,并且是根据他已经知道的东西计算出来的。我想要的只是让典型的建筑建筑师在我不知情的情况下复制我的软件变得太难了(请记住,该软件将是免费软件 - 我想要的只是谁安装了它的书面记录...... )
非常感谢您的回答。